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

ian*_*ell 1 python dictionary list

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

mydict[my_key][my_value] = [mydict[my_key][my_value]].append(new_value)
Run Code Online (Sandbox Code Playgroud)

或这个

mydict[my_key][my_value] = list(mydict[my_key][my_value]).append(new_value)
Run Code Online (Sandbox Code Playgroud)

结构如下:

{'foo': {'bar': 'hi'}}
Run Code Online (Sandbox Code Playgroud)

而且我要:

{'foo': {'bar': ['hi', 'bye']}}
Run Code Online (Sandbox Code Playgroud)

iCo*_*dez 5

你不应该做任何一个.

list.append在原地工作并始终返回None.因此,mydict[my_key][my_value]None在Python执行其中任一行之后分配给它们.

你需要自己打电话list.append:

mydict[my_key][my_value] = [mydict[my_key][my_value]]
mydict[my_key][my_value].append(new_value)
Run Code Online (Sandbox Code Playgroud)

此外,list()[]是两个不同的东西.

  • mydict[my_key][my_value]在方括号使得一个项目列表,mydict[my_key][my_value]是该项目.

  • list()然而,使用Python会迭代mydict[my_key][my_value]并将其项目收集到列表中.此外,TypeError如果mydict[my_key][my_value]不可迭代,将引发a .

以下是我上面所说的:

>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)