尝试向Python嵌套字典添加多个列表,却丢失首个列表条目
问题分析与解决
你的问题出在字典key的唯一性上:在generateScript函数里,你用state作为嵌套字典的外层key,每次循环都会直接给nested_dict[state]赋值。如果两个条目对应的state值相同,后一个条目会直接覆盖前一个,导致第一个条目“丢失”。
验证问题
先确认entryData里的两个条目是否有相同的state值(也就是每行拆分后的第一个元素)。看你代码里的print(parts)输出,检查两行的第一个元素是否一致。如果一致,那就是覆盖问题。
解决方案
根据你的需求选择对应方式:
1. 每个state唯一(修正重复state)
如果每个state应该只对应一组数据,那需要检查输入的条目,确保state不重复,或者在代码里增加重复检查:
for line in myList: # 其他代码不变... if state in nested_dict: print(f"警告:state {state} 已存在,将跳过或覆盖") # 这里可以选择跳过:continue,或者保留原数据不覆盖 nested_dict[state] = { 'amount': amount, 'rate': rate, 'value': value, 'category': category }
2. 同一个state对应多组数据(改为列表存储)
如果需要同一个state下保存多个条目,把外层字典的value改成列表,每次append新的字典:
def generateScript(myList): fileName = ent_script_name.get() nested_dict = {} for line in myList: decimal.getcontext().prec = 3 parts = line.split() print(parts) state = parts[0] amount = int(parts[1]) rate = decimal.Decimal(parts[2]) value = decimal.Decimal(parts[3]) category = parts[4] print(f'Getting part 4 {parts[4]}') # 改为列表存储多条目 if state not in nested_dict: nested_dict[state] = [] nested_dict[state].append({ 'amount': amount, 'rate': rate, 'value': value, 'category': category })
这样处理后,同一个state下会保存所有对应的条目,不会出现覆盖丢失的情况。
内容的提问来源于stack exchange,提问作者Chewy
相关产品推荐
相关产品推荐

