Python3附加键值对改变了之前的条目

时间:2017-03-30 15:45:34

标签: python list append

我正在尝试构建以下JSON:

{'Keys-1': [{'Key1': 'Value1'}, {'Key1': 'Value2'}]}

以下是我用来构建这个JSON的代码:

existingFile = {}
importobjs = []
importobj = {}
objkey = 'Key1'
objvalue = 'Value1'
importobj[objkey] = objvalue
importobjs.append(importobj)
objvalue = 'Value2'
importobj[objkey] = objvalue
importobjs.append(importobj)
existingFile['Keys-1'] = importobjs

几乎完美地工作,除了第一个键值对的值更新为'Value2'

{'Keys-1': [{'Key1': 'Value2'}, {'Key1': 'Value2'}]}

1 个答案:

答案 0 :(得分:0)

代码的问题(如评论中所述)是对象是通过引用而不是通过值传递的。您的existingFile实际上是什么样的

{'Keys-1': [object@importobj_address, object@importobj_address]}

因此,您的数组包含两个完全相同的对象。如果您再次更改importobj并将其添加到importobjs,那么您将在阵列中拥有3个完全相同的对象。

以下是如何正确实现此功能的示例:

existingFile = {}
importobjs = []
first_key = 'Key1'
importobjs.append({first_key:'Value1'})
importobjs.append({first_key:'Value2'})
existingFile['Keys-1'] = importobjs

扩展示例:

existingFile = {}
first_objs = []
first_key = 'Key1'
first_objs.append({first_key:'Value1'})
first_objs.append({first_key:'Value2'})
existingFile['Keys-1'] = first_objs
second_objs = []
second_key = 'Key2'
second_objs.append({second_key:'Value3'})
second_objs.append({second_key:'Value4'})
existingFile['Keys-2'] = second_objs

但是,通过循环遍历列表而不是每个字符串的变量,可以避免大部分问题。