Python实现列表转字典列表时输出所有字典重复的问题如何解决
Python字典列表生成代码bug修复方案
问题原因
你的代码核心问题是字典属于Python可变对象,你将字典k的初始化放在了循环外部:
- 整个程序运行过程中只会创建1个字典对象
- 每次循环修改的都是同一个字典的键值对
- 调用
append(k)时,只是把同一个字典的引用追加到结果列表里,并没有创建新的字典 - 循环结束后所有列表元素都指向同一个最终被修改为最后一组值的字典,就出现了所有元素都是最后一条数据的问题。
修复方案
基础修改(保持原有逻辑)
把字典初始化的逻辑移到外层循环内部,每次处理新的子列表时都新建一个空字典:
def dic_list_gen(los,l): d = [] for x in l: k = {} # 每次循环新建独立的空字典 i = 0 for r in los: k[r] = x[i] i = i+1 d.append(k) return d
优化写法(更符合Python编码习惯)
可以直接用zip拼接键列表和值列表,配合字典构造和列表推导式,大幅简化代码:
def dic_list_gen(los, l): return [dict(zip(los, sub_list)) for sub_list in l]
内容的提问来源于stack exchange,提问作者Anshul Dayavaan
相关产品推荐
相关产品推荐

