2017-04-20 51 views
2

我創建了一個字典如下:更新值 - Python的

gP = dict.fromkeys(range(6), {'a': None, 'b': None, 'c': None, 'd': None}) 

現在,當我嘗試修改值做:

gP[0]['a'] = 1 

出於某種原因,所有的值a(無論他們屬於關鍵的到)到1的變化,如下圖所示:

{0: {'a': 1, 'b': None, 'c': None, 'd': None}, 
1: {'a': 1, 'b': None, 'c': None, 'd': None}, 
2: {'a': 1, 'b': None, 'c': None, 'd': None}, 
3: {'a': 1, 'b': None, 'c': None, 'd': None}, 
4: {'a': 1, 'b': None, 'c': None, 'd': None}, 
5: {'a': 1, 'b': None, 'c': None, 'd': None}} 

我做錯了嗎?什麼是適當的賦值語句?

+1

你只是建立一個* *字典。 Python不會爲你製作副本。 – deceze

+0

你能否詳細說明一下?我不明白如何解決你的答案,@deceze。 –

回答

5

正如@deceze所說,Python不會製作副本。您在鍵值對的所有值部分引用相同的字典。

另一種方法是:

gP = {x: {'a': None, 'b': None, 'c': None, 'd': None} for x in range(6)} 

更新:有這個答案更清潔的版本由@Chris_Rands

{x: dict.fromkeys('abcd') for x in range(6)} 
+2

對於範圍(6)中的x,較短的將是'{x:dict.fromkeys('abcd')}';或者可能更快地將循環外部的'dict.fromkeys'用於 –

+0

@Chris_Rands:你應該把它作爲一個單獨的答案。我比我更喜歡它。 :) – SuperSaiyan

+0

你可以將它添加到你的答案:) –