我应该使用list()还是括在括号中?

时间:2014-11-22 17:10:00

标签: python list dictionary

如果我有一个嵌套字典,并且我想在列表中创建一个值并添加到它,我应该这样做吗

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

2 个答案:

答案 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)
相关问题