Python:附加到dicts列表

时间:2018-02-12 04:29:30

标签: python dictionary

当我生成一个dict并将其添加到列表中,然后生成具有类似结构的第二个dict并将其附加到该列表时,结果列表是第二个dict的两个副本,而不是包含两个dict的列表。第一和第二个词。

我的代码:

    i=1
    UnitTabs = {};   TextUnits=[]
    theseTextUnits = {}
    theseTextUnits['documentId'] = i
    theseTextUnits['xPosition'] = 200; theseTextUnits['yPosition'] = 200;  theseTextUnits['name'] = 'From date'
    TextUnits.append(theseTextUnits)
    theseTextUnits['xPosition'] = 250; theseTextUnits['yPosition'] = 250;   theseTextUnits['name'] = 'To date'
    TextUnits.append(theseTextUnits)
    print(TextUnits)

预期产出:

[{'xPosition': 200, 'yPosition': 200, 'name': 'From date', 'documentId': 1},
 {'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1}]

实际输出:

[{'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1}, 
 {'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1}]

3 个答案:

答案 0 :(得分:1)

这是因为您正在修改相同的dict实例:

theseTextUnits['name'] = 'To date'

而且,这也将改变原始字典中的值。你需要做的是复制字典,然后修改你想要的值。

import copy
newDict = copy.deepcopy(theseTextUnits)
newDict['xPosition'] = 250
newDict['yPosition'] = 250
newDict['name'] = 'To date'
TextUnits.append(newDict)

答案 1 :(得分:0)

这里发生的是你正在编辑同一个字典。 Python从不隐式复制对象。如果您使用copy方法,它将解决问题

TextUnits.append(theseTextUnits.copy())

答案 2 :(得分:0)

Python中的字典是可变对象。这意味着可以更改实际值(而不是返回新对象)

例如:

a={1:1}
b=a
b[1]=2
print(a)

{1:2}