gpt4 book ai didi

对列表的 Python 字典更新会给出错误的输出

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:01 24 4
gpt4 key购买 nike

我的问题是将字典更新为列表时。

输入:

>>> 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))

关于对列表的 Python 字典更新会给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17883500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com