首页 > 解决方案 > 在 Python 中将列表元素附加到字典时出错

问题描述

尝试将元素列表附加到字典时,我遇到了一个奇怪的问题。我不确定我做错了什么。很感谢任何形式的帮助。

这是我所拥有的:

keys = ['a', 'b', 'c']
d = dict.fromkeys(keys, [])
d['a'].append(10)
d['a'].append(11)
d['b'].append(30)
print(d)

我得到的输出是:

{'a': [10, 11, 30], 'b': [10, 11, 30], 'c': [10, 11, 30]}

我希望:

{'a': [10, 11], 'b': [30], 'c': None}

谢谢

标签: pythonpython-3.x

解决方案


您正在提供一个空列表,并将fromkeys()此特定对象用于所有键,以便它们的对应值引用同一对象。当您这样做时d['a'].append(10),它会附加10到所有 dict 项共享的单个对象,从而产生您现在得到的结果。

Python 文档提到了这种确切的情况:

fromkeys() 是一个返回新字典的类方法。值默认为无。所有的值都只引用一个实例,因此 value 通常是一个可变对象(例如空列表)是没有意义的。要获得不同的值,请改用 dict 理解。

https://docs.python.org/3/library/stdtypes.html#mapping-types-dict

按照 python 文档中的建议,您可以这样做d = {k: [] for k in keys}


推荐阅读