Python:如何在dict中扩展列表存储的内容?

时间:2014-03-10 17:51:24

标签: python dictionary

我正面临一个非常简单而奇怪的Python问题。

我有一个带有几个键的字典,其中包含空列表。 我想追加/扩展特定键列表的内容。 因此我认为的代码看起来像这样

d = dict.fromkeys(['A','B','C'],[])
d['A'].append('Hello')

然而,结果并非我所期望的。 每个键的值是一个包含一个元素的列表:'Hello'

>>> d
{'A': ['Hello'], 'C': ['Hello'], 'B': ['Hello']}

如果我尝试以下内容,则会产生相同的结果

d.get('A').append('Bye')

我必须做什么操作才能获得这个?

>>> d
{'A': ['Hello'], 'C': [], 'B': []}

有人可以解释我的语法出了什么问题吗?

2 个答案:

答案 0 :(得分:5)

您的语法很好,但您一遍又一遍地使用相同的列表。由于列表是可变的,当您append时,您将'Hello'添加到同一列表中,这恰好在三个地方引用。你可能想要做的是手动创建一个dict:

d = {k:[] for k in ['A', 'B', 'C']}

(以上是Python 2.7或更高版本。对于较旧的Python,您可以使用:dict((k,[]) for k in ['A', 'B', 'C'])

答案 1 :(得分:2)

你正在创建一个字典,其所有值都引用与@Aशwiniचhaudhary提到的相同的实例[]。 您可能想要使用defaultdict

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']
[]