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

Python:如何在dict中扩展列表存储的内容?,python,dictionary,Python,Dictionary,我面临一个非常简单和奇怪的Python问题 我有一个有几个键的dict,其中包含空列表。 我想附加/扩展特定键列表的内容。 因此,我想到的代码如下所示 d = dict.fromkeys(['A','B','C'],[]) d['A'].append('Hello') 然而,结果并不是我所期望的。 每个键的值都是一个包含一个元素的列表:“Hello” >>> d {'A': ['Hello'], 'C': ['Hello'], 'B': ['Hello']} 如果我尝试下面

我面临一个非常简单和奇怪的Python问题

我有一个有几个键的dict,其中包含空列表。 我想附加/扩展特定键列表的内容。 因此,我想到的代码如下所示

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': []}
有人能解释一下我的语法出了什么问题吗?

你的语法很好,但你一遍又一遍地使用同一个列表。由于列表是可变的,因此当您添加时,您正在将“Hello”添加到同一个列表中,该列表恰好在三个位置被引用。您可能想做的是手动创建dict:

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

(以上是Python2.7或更高版本。对于较旧的Python,您可以使用:
dict((k,[])表示['A','B','C']中的k)

您正在创建一个字典,其所有值都引用与@A相同的实例
[]
श威尼च豪德利提到。 您可能需要使用
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']
[]
[150]中的
:从集合导入defaultdict
In[151]:d=defaultdict(列表)
在[152]中:d['A'].append('Hello')
In[153]:d
Out[153]:defaultdict(,{'A':['Hello']})
在[154]中:打印d['B']
[]
我觉得这有助于我更好地理解python的概念,因为它与C语言略有不同,而且违反直觉/++