Python: appending to list of dicts
本问题已经有最佳答案,请猛点这里访问。
当我生成一个dict并将其添加到一个列表中,然后生成第二个结构类似的dict并将其附加到该列表中时,得到的列表是第二个dict的两个副本,而不是同时包含第一个和第二个dict的列表。
我的代码:
1 2 3 4 5 6 7 8 9 | 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) |
预期输出:
1 2 | [{'xPosition': 200, 'yPosition': 200, 'name': 'From date', 'documentId': 1}, {'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1}] |
号
实际输出:
1 2 | [{'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1}, {'xPosition': 250, 'yPosition': 250, 'name': 'To date', 'documentId': 1}] |
发生这种情况是因为您正在修改同一dict实例:
1 | theseTextUnits['name'] = 'To date' |
而且,这也会改变原始dict中的值。您需要做的是复制dict,然后修改您想要的值。
1 2 3 4 5 6 | import copy newDict = copy.deepcopy(theseTextUnits) newDict['xPosition'] = 250 newDict['yPosition'] = 250 newDict['name'] = 'To date' TextUnits.append(newDict) |
号
python中的字典是可变的对象。这意味着实际值可以更改(而不是返回新对象)
例如:
1 2 3 4 5 6 | a={1:1} b=a b[1]=2 print(a) {1:2} |
这里发生的是你正在编辑同一本字典。python从不隐式复制对象。如果使用
江户十一〔一〕号