为何for循环执行两次?list_dic_gen函数输出不符合预期排查
问题分析与解决
问题原因
你的代码在第一个示例中生成两个重复字典的核心原因是**acc.append(accd)放在了内层循环里**:
- 第一个示例中,外层
for x in lol仅执行1次(lol只有1个列表元素),但内层for b in x会遍历['First','Second'],执行2次循环。 - 每次内层循环都会触发
acc.append(accd),第一次append时accd是{'One': 'First'},第二次append时accd已被更新为{'One': 'First', 'Two': 'Second'}——由于两次append的是同一个字典对象的引用,最终acc里的两个元素指向同一个字典,表现为两个重复的内容。
修复后的代码
把acc.append(accd)移到内层循环之外,确保每个子列表处理完成后只向结果列表添加一次字典:
def list_dic_gen(lst, lol): acc = [] a = 0 for x in lol: accd = {} for b in x: accd[lst[a]] = b if len(lst) > 1: a += 1 acc.append(accd) # 调整到内层循环外部 return acc
验证结果
- 调用
list_dic_gen(['One','Two'], [['First','Second']]),返回[{'One': 'First', 'Two': 'Second'}],符合预期。 - 调用
list_dic_gen(['Second'], [['One'],['Third Fourth']]),返回[{'Second': 'One'}, {'Second': 'Third Fourth'}],依然正常工作。
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

