2013-05-17 80 views
3

我需要一點幫助。我是一個新的Python編碼器。我需要很多幫助。所以,我想在兩個字典中添加不同的變量。一個例子是:如何添加兩個python字典,使不等於成爲零?

x = {'a':1, 'b':2} 

y = {'b':1, 'c':2} 

我要替換這些值,使得它看起來像:

x = {'a':1, 'b':2, 'c':0} 

y = {'a':0, 'b':1, 'c':2} 
+0

哪個python版本是你實際使用的,你已經標記了2.7和3.x.這使得在使用諸如'.viewkeys()'等方法時會引起混淆,因爲在Py 3上它已更改爲'.keys()' – jamylak

+0

我正在使用python 3.對不起。沒想到4分鐘內有這麼多回復! – user2392755

回答

6
>>> x = {'a':1, 'b':2} 
>>> y = {'b':1, 'c':2} 
>>> for k in y: 
... x.setdefault(k, 0) 
... 
0 
2 
>>> for k in x: 
... y.setdefault(k, 0) 
... 
0 
2 
1 
>>> x 
{'a': 1, 'c': 0, 'b': 2} 
>>> y 
{'a': 0, 'c': 2, 'b': 1} 
+0

+1這比我的解決方案好。 –

+0

好謙虛Ashwini!保持!而且,偉大的答案gnibbler!謝謝! – user2392755

4
>>> x = {'a':1, 'b':2} 
>>> y = {'b':1, 'c':2} 
>>> keys = x.viewkeys() | y.viewkeys() #returns union of keys in x and y 
>>> x = {k : x.get(k,0) for k in keys} 
>>> y = {k : y.get(k,0) for k in keys} 
>>> x 
{'a': 1, 'c': 0, 'b': 2} 
>>> y 
{'a': 0, 'c': 2, 'b': 1} 

變化的字典就地:

>>> x = {'a':1, 'b':2} 
>>> y = {'b':1, 'c':2} 
>>> diff_x = y.viewkeys() - x.viewkeys() 
>>> diff_y = x.viewkeys() - y.viewkeys() 
#if you're using a mutable object as value instead of 0, 
#then you've to use a dict comprehension instead of dict.fromkeys. 
>>> x.update(dict.fromkeys(diff_x,0)) 
>>> y.update(dict.fromkeys(diff_y,0)) 
>>> x 
{'a': 1, 'c': 0, 'b': 2} 
>>> y 
{'a': 0, 'c': 2, 'b': 1} 
+0

使用生成器表達式而不是'dict' comprehension或'dict.fromkeys'來傳遞給'dict.update'會更好,因爲它是懶惰地評估的。 – jamylak

1

如果你需要一個新的字典作爲結果,這個解決方案會很好:

>>> x = {'a':1, 'b':2} 
>>> y = {'b':1, 'c':2} 
>>> dict(dict.fromkeys(y, 0), **x) 
{'a': 1, 'c': 0, 'b': 2} 
>>> dict(dict.fromkeys(x, 0), **y) 
{'a': 0, 'c': 2, 'b': 1}