我正在尝试将字典的冗余副本制作为列表,但要更新其中一个键。最初,列表仅包含一项,例如:
l1 = [{'case':1}]
我运行了以下循环:
for i in range(1,4):
l1.append(l1[i-1])
l1[i]['case'] += 1
我希望输出为:[{'case':1},{'case':2},{'case':3},{'case':4}]
实际输出如下:[{'case':4},{'case':4},{'case':4},{'case':4}]
如何获得预期的输出?
答案 0 :(得分:1)
Python对原始字典保留引用,因此,如果您使用l1[i]['case'] += 1
更改字典,则它会更改列表中的每个字典,因为它们是对同一对象的引用(换句话说,它们是相同字典)。
为了使它们独立,您必须调用dict.copy()
,因此,如果将代码更改为以下代码,它将起作用:
l1 = [{'case':1}]
for i in range(1,4):
l1.append(l1[i-1].copy())
l1[i]["case"] += 1
print(l1)