我的问题是将字典更新为列表时。
输入:
>>> res=[]
>>> my_inital_dict={'aa':1,'bb':1}
>>> for i in range(4):
... my_initial_dict.update({'aa':i+4})
... print my_initial_dict
... res.append(my_initial_dict)
我得到的输出:
{'aa': 4, 'bb': 1}
{'aa': 5, 'bb': 1}
{'aa': 6, 'bb': 1}
{'aa': 7, 'bb': 1}
>>> res
[{'aa': 7, 'bb': 1}, {'aa': 7, 'bb': 1}, {'aa': 7, 'bb': 1}, {'aa': 7, 'bb': 1}]
当我在循环中打印 my_initial_dict
时,我得到了正确的值。但是当我打印结果列表时,我得到的是同一个字典重复 4 次的字典列表。有人可以解释这里发生了什么吗?
如前所述,您的 res 列表中的所有项目都引用相同的对象。
你:附加这个 mutable 反对一个列表,改变它,然后再次附加它,现在告诉我它是什么样子。
计算机:将对象添加到列表,将相同的对象添加到列表,这是您的列表,其中包含相同的两个对象。
这是另一种说法;首先,您使用对象构建列表,然后显示对象列表,在本例中是相同对象的列表,因此它会在列表的每个位置显示该对象的最新状态,而不是您添加它时的状态,除非您复制它。
其他方式,仅供娱乐;
嵌套 Comprehension或使用 lamda 进行映射,使用 copy() 和 update()
my_inital_dict={'aa':1,'bb':1}
res = [x[1] for x in [(my_inital_dict.update({'aa':i+4}),
my_inital_dict.copy()) for i in range(4)]]
-或-
res = map(lambda i: my_inital_dict.update({'aa':i+4}) or my_inital_dict.copy(),
range(4))
我是一名优秀的程序员,十分优秀!