>>> 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 :(得分: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}
答案 1 :(得分: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}
答案 2 :(得分: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
没有给定键值的情况。
答案 3 :(得分: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}
答案 4 :(得分:1)
您可以使用try
/ except
执行此操作,如下所示:
for k,v in D2.items():
try:
D1[k] += v
except KeyError:
D1[k] = v