如何在Python中更新列表且不丢失原有元素的status字段值
问题原因
你修改后的代码存在逻辑错误:遍历原有列表判断条目是否存在时,只要后续有任意一个条目不匹配,found变量就会被重置为False,最终仅当列表最后一个条目匹配时才能正确识别到重复,其他情况都会判定为不存在,导致重复添加条目。此外你两次打开文件、硬编码索引切取字符串的方式也容易出错,不建议使用。
正确实现代码
# 你原有的存储数据的列表,注意不要用list作为变量名(会覆盖Python内置list类型),这里用data_list指代 # data_list = [] 首次初始化可以这么写,后续更新不要重新赋值也不要clear # 仅打开一次文件读取所有行 with open('var_share.txt', 'r', encoding='utf-8') as f: lines = f.readlines() for line in lines: line = line.strip() if not line: continue # 跳过空行 # 按空格拆分内容,直接获取ID和交易对,不需要硬编码切位置 _, id_str, symbol = line.split() current_id = int(id_str) # 判断当前条目是否已存在 is_exist = False for item in data_list: if item['symbol'] == symbol: is_exist = True break # 找到匹配项直接终止循环,避免后续遍历重置状态 # 不存在则新增条目,默认status为False,原有条目保留status值 if not is_exist: data_list.append({ 'ID': current_id, 'symbol': symbol, 'status': False }) # 可选逻辑:如果需要删除文件中已移除的条目,添加以下代码即可 # file_symbols = {line.strip().split()[2] for line in lines if line.strip()} # data_list = [item for item in data_list if item['symbol'] in file_symbols]
内容的提问来源于stack exchange,提问作者avr_dude
相关产品推荐
相关产品推荐

