Python: How to extend the content of a list store in a dict?
本问题已经有最佳答案,请猛点这里访问。
我正面临着一个非常简单和奇怪的Python问题。
我有一个带有几个键的字典,其中包含空列表。
我想追加/扩展特定键列表的内容。
因此我认为的代码看起来像这样
1 2 | d = dict.fromkeys(['A','B','C'],[]) d['A'].append('Hello') |
但是,结果并不是我所期望的。
每个键的值是一个包含一个元素的列表:'Hello'
1 2 | >>> d {'A': ['Hello'], 'C': ['Hello'], 'B': ['Hello']} |
如果我尝试下面的内容,它会产生同样的结果
1 | d.get('A').append('Bye') |
我必须做什么操作才能获得这个?
1 2 | >>> d {'A': ['Hello'], 'C': [], 'B': []} |
有人能解释我的语法出了什么问题吗?
你的语法很好,但你一遍又一遍地使用相同的列表。 由于列表是可变的,当你
1 | d = {k:[] for k in ['A', 'B', 'C']} |
(以上是Python 2.7或更高版本。对于较旧的Python,您可以使用:
你正在创建一个字典,其所有值都引用同一个实例
您可能想要使用
1 2 3 4 5 6 7 8 9 10 11 | In [150]: from collections import defaultdict In [151]: d = defaultdict(list) In [152]: d['A'].append('Hello') In [153]: d Out[153]: defaultdict(<type 'list'>, {'A': ['Hello']}) In [154]: print d['B'] [] |