2014-04-22 78 views
-1
>>> D1 = {'potatoes':2.67,'sugar':1.98,'cereal':5.99,'crisps':1.09} 
>>> D2 = {'parsley':0.76,'cereal':3.22} 
>>> D1 = updateDictionaryByIncrementing(D1, D2) 

如何根據D2的內容更新D1的鍵/值?更新字典遞增

+0

什麼是你的問題? – Mathias

+0

目前還不清楚你在問什麼,可否請您更改問題 –

+0

我想用D2的鍵/值 – user3560284

回答

6

您可以使用循環的鑰匙:

for key in D2: 
    D1[key] = D1.get(key, 0) + D2[key] 

,或者您可以使用collections.Counter()對象:後者技術的

from collections import Counter 

D1 = dict(Counter(D1) + Counter(D2)) 

演示:

>>> from collections import Counter 
>>> D1 = {'potatoes':2.67,'sugar':1.98,'cereal':5.99,'crisps':1.09} 
>>> D2 = {'parsley':0.76,'cereal':3.22} 
>>> Counter(D1) + Counter(D2) 
Counter({'cereal': 9.21, 'potatoes': 2.67, 'sugar': 1.98, 'crisps': 1.09, 'parsley': 0.76}) 
>>> dict(Counter(D1) + Counter(D2)) 
{'cereal': 9.21, 'parsley': 0.76, 'sugar': 1.98, 'potatoes': 2.67, 'crisps': 1.09} 
+0

更新D1真的非常感謝 – user3560284

2

計數器爲方便方式做到這一點(計數不一定是整數)

>>> from collections import Counter 
>>> D1 = {'potatoes':2.67,'sugar':1.98,'cereal':5.99,'crisps':1.09} 
>>> D2 = {'parsley':0.76,'cereal':3.22} 
>>> Counter(D1) + Counter(D2) 
Counter({'cereal': 9.21, 'potatoes': 2.67, 'sugar': 1.98, 'crisps': 1.09, 'parsley': 0.76}) 

您也可以使用dict.update榜單:

>>> D1.update((k, D1.get(k, 0) + v) for k, v in D2.items()) 
>>> D1 
{'potatoes': 2.67, 'parsley': 0.76, 'crisps': 1.09, 'cereal': 9.21, 'sugar': 1.98} 
+0

非常感謝你 – user3560284

1

如果你想增加字典的值,你可以實現updateDictionaryByIncrementing這樣的:

def updateDictionaryByIncrementing(a,b): 
    c = dict() 
    for k,v in b.items(): 
     c[k] = a.get(k,0.0) + v 
    return c 

通過使用get方法在a字典中,使用默認值處理a對給定鍵沒有值的情況。

1

您可以使用字典解析,這樣

D1 = {'potatoes': 2.67, 'sugar': 1.98, 'cereal': 5.99, 'crisps': 1.09} 
D2 = {'parsley': 0.76, 'cereal': 3.22} 
print {key: D1.get(key, 0) + D2.get(key, 0) for key in D1.viewkeys() | D2} 

輸出

{'cereal': 9.21, 
'crisps': 1.09, 
'parsley': 0.76, 
'potatoes': 2.67, 
'sugar': 1.98} 
1

你可以做,使用try/except如下:

for k,v in D2.items(): 
    try: 
     D1[k] += v 
    except KeyError: 
     D1[k] = v