如果我有一个嵌套字典,并且我想在列表中创建一个值并添加到它,我应该这样做吗
mydict[my_key][my_value] = [mydict[my_key][my_value]].append(new_value)
或者
mydict[my_key][my_value] = list(mydict[my_key][my_value]).append(new_value)
结构如下:
{'foo': {'bar': 'hi'}}
我希望:
{'foo': {'bar': ['hi', 'bye']}}
答案 0 :(得分:5)
你不应该做任何一个。
list.append
就地工作,并始终返回None
。因此,在Python执行其中任一行之后,mydict[my_key][my_value]
将被分配给None
。
您需要在自己的行上致电list.append
:
mydict[my_key][my_value] = [mydict[my_key][my_value]]
mydict[my_key][my_value].append(new_value)
此外,list()
和[]
是两回事。
将mydict[my_key][my_value]
放在方括号中会生成一个单项列表,其中mydict[my_key][my_value]
是项目。
然而,使用list()
告诉Python迭代mydict[my_key][my_value]
并将其项目收集到列表中。此外,如果TypeError
不可迭代,则会引发mydict[my_key][my_value]
。
以下是我上面所说的内容的演示:
>>> tup = (1, 2, 3)
>>> [tup] # Places tup in a list
[(1, 2, 3)]
>>> list(tup) # Makes tup into a list
[1, 2, 3]
>>>
>>> [1]
[1]
>>> list(1) # Integers are not iterable
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>
答案 1 :(得分:1)
如果你想要每个dict元素的列表,请使用`defaultdict``
from collections import defaultdict
mydict = defaultdict(list)
mydict[some_key].append(new_value)