通过递增更新字典

时间:2014-04-22 12:49:59

标签: python dictionary

>>> 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的键/值?

5 个答案:

答案 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