gpt4 book ai didi

python - 将值 append 到字典中的一个列表将值 append 到字典中的所有列表

转载 作者:太空狗 更新时间:2023-10-29 17:57:19 25 4
gpt4 key购买 nike

问题

我正在通过以下方式创建一个包含空列表作为值的字典。

>>> words = dict.fromkeys(['coach', 'we', 'be'], [])

字典看起来像这样。

>>> words
{'coach': [], 'be': [], 'we': []}

当我将一个值 append 到一个列表时,该值将 append 到所有列表,如本例所示。

>>> words['coach'].append('test')
{'coach': ['test'], 'be': ['test'], 'we': ['test']}

问题

我的问题分为两部分。首先,为什么会这样?其次,我能做些什么呢?也就是说,我如何才能将值 append 到一个列表?

我想象在创建字典时,我让所有列表都指向同一个对象。但我不明白这是怎么回事,因为当我在字典创建中输入 0 而不是 [] 然后添加值而不是 append 它们时,这些值的行为不同如果它们指向不同的对象。

如有任何意见,我将不胜感激。提前致谢!

最佳答案

dict.fromkeys 对所有值使用相同的对象,在本例中是一个mutable 列表...这意味着所有键共享相同的空列表...当您尝试.append 到一个列表的值时,更改是就地对对象进行的,因此对它的更改是所有引用它的人都可见。

如果您改为使用 dict-comp,例如:{k:[] for k in ['could', 'we', 'be']} 每个 [] 是一个不同的空列表,因此每个键值都是唯一的,并且按预期工作。

关于使用 dict.fromkeys(['a', 'b', 'c'], 0) 0 是一个不可变 对象因此不受该陷阱的影响,因为对它的更改会导致新对象,而不是对不同名称(在本例中为不同键的值)可能共享的底层对象的更改。

关于python - 将值 append 到字典中的一个列表将值 append 到字典中的所有列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23397153/

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