2014-11-22 141 views
1

如果我有一個嵌套的字典,我想打一個值列表,並添加到它,我應該這樣做我應該使用list()還是用括號括起來?

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

「既不」的選項? – vaultah 2014-11-22 17:10:23

+0

當然。請繼續。 – 2014-11-22 17:10:40

回答

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]並將其項目收集到列表中。此外,如果mydict[my_key][my_value]不可迭代,則將提出TypeError

下面是我上面所說的演示:

>>> 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 
>>> 
+0

'mydict [my_key] [my_value] .append(new_value)'returns' AttributeError' – 2014-11-22 17:19:06

+1

這是因爲您還沒有製作'mydict [my_key] [my_value]'列表。我不知道數據的確切性質,所以我不能告訴你是否使用'list()'或'[]'。基本上,如果你希望Python遍歷'mydict [my_key] [my_value]'並且將它的項目收集到列表中,你應該使用'list()'。否則,使用'[mydict [my_key] [my_value]]'讓Python在列表中放置'mydict [my_key] [my_value]'。 – iCodez 2014-11-22 17:21:32

+0

這是我原來的問題,我用'.append()'廢話混淆了它。你應該把你的答案的'...'部分改爲'[mydict [my_key] [my_value]]',這樣就很清楚如何解決它。 – 2014-11-22 17:28:12

1

如果你想爲每個字典元素的列表中,使用'defaultdict``

from collections import defaultdict 
mydict = defaultdict(list) 
mydict[some_key].append(new_value) 
+0

我不需要每個dict元素都有一個,只是碰巧共享密鑰的值。 – 2014-11-22 17:22:15

+0

您__需要每個條目的列表,因爲您不想編寫代碼,如果有多個條目,則進行測試。 – Daniel 2014-11-22 17:25:12

+0

所以'如果鍵入(mydict ['foo'] ['bar'])== list'太多的代碼? – 2014-11-22 17:27:29

相關問題