2014-10-30 70 views
-1

我有兩個字典。Python字典的更新方法沒有工作

a = {"ab":3, "bd":4} 
b = {"cd":3, "ed":5}` 

我想將它們結合到{'bd': 4, 'ab': 3, 'ed': 5, 'cd': 3}

由於this表示,a.update(b)可以完成它。但是當我嘗試時,我得到:

type(a.update(b)) #--> type 'NoneType' 

有人願意向我解釋爲什麼我無法獲得字典類型嗎?

我也試過這樣,它做的很好:

type(dict(a,**b)) #-->type 'dict' 

的是這兩種方法之間的差異,爲什麼第一個不能正常工作?

+0

它不會返回第3個字典,它會更新到位。 – 2014-10-30 14:10:01

+0

你的意思是我不能將結果存儲在第三個變量中? – allenwang 2014-10-30 14:12:16

+0

你可以,但它會是'沒有'。 – 2014-10-30 14:12:43

回答

1

作爲一個新的Python用戶,這對我來說是一個非常頻繁的「陷阱」,因爲我似乎總是忘記它。

正如你所猜測的,a.update(b)返回None,就像a.append(b)將返回None的列表。這些方法更新數據結構到位

假設你沒有真正想要a進行修改,試試這個:

from copy import deepcopy 
c = deepcopy(a) 
c.update(b) 
type(c) #returns a dict 
print(a) 
print(b) 
print(c) 

應該這樣做。這樣做的另一種方式:

c = dict(a,**b) 
type(c) #returns a dict 

是更好的國際海事組織。這到底是怎麼發生的是b被解開,所以你是什麼實際上做的是這樣的:

c = dict(a, cd=3, ed=5) 
type(c) #returns a dict 

完成後這種方式,注意,如果在a中鍵b是重複的,它們的值會被替換,例如:

a = {"ab":3, "bd":4} 
c = dict(a, ab=5) 
c #returns {"ab":5, "bd":4} 
5

update方法更新字典就地。它返回None,就像list.extend一樣。要查看結果,請查看您更新的詞典。

>>> a = {"ab":3, "bd":4} 
>>> b = {"cd":3, "ed":5} 
>>> update_result = a.update(b) 
>>> print(update_result) 
None 
>>> print(a) 
{'ed': 5, 'ab': 3, 'bd': 4, 'cd': 3} 

如果你想要得到的結果是第三,單獨的字典,你不應該使用update。改爲使用類似dict(a, **b)的東西,正如您已經注意到的那樣,這兩個組件構建了一個新的字典,而不是更新現有的一個。

3

dict.update()回報None,就像到位修改容器中的大多數方法(list.append()list.sort()set.add()等)。這是由設計,所以你不會被愚弄,認爲它會創建一個新的dict(或list等)。