Python中循环将字典对象添加到列表时为何会出现数据重复?
问题分析与解决
你碰到的这个问题其实很常见——核心原因是字典对象的引用复用。
你在循环外面只创建了一个datarow字典,每次循环只是修改这个字典里的键值对,而cont.append(datarow)添加的是这个字典的引用,不是新的独立对象。所以数组里的所有元素其实都指向同一个字典,当最后一次循环修改完字典内容后,数组里的所有元素都会显示成最后一次的结果。
修正后的基础版代码
把字典的创建放到循环内部,每次循环都生成一个新的字典对象,避免引用复用:
cont = [] for x in result: datarow = {} # 每次循环新建一个独立字典 input = x[0] response = x[1] datarow['input'] = input datarow['response'] = response print(datarow) cont.append(datarow)
更简洁的写法
可以直接在循环里构造字典,省去单独赋值的步骤:
cont = [] for x in result: datarow = {'input': x[0], 'response': x[1]} print(datarow) cont.append(datarow)
高效的列表推导式写法
如果不需要中间的打印步骤,用列表推导式能一步完成,代码更简洁:
cont = [{'input': x[0], 'response': x[1]} for x in result] print(cont)
这样处理后,cont数组里就会包含两个独立的字典对象,分别对应两组不同的问答内容了。
内容的提问来源于stack exchange,提问作者user3572565
相关产品推荐
相关产品推荐

