通过递增更新字典

2024-04-20 12:43:18 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> 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的键/值?你知道吗


Tags: 内容sugard2d1cerealparsleypotatoescrisps
3条回答

计数器是一种方便的方法(计数不必是整数)

>>> 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}

如果要增加字典的值,可以实现updateDictionaryByIncrementing,如下所示:

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

通过使用a字典的get方法,使用默认值处理a没有给定键的值的情况。你知道吗

您可以使用循环键:

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}

相关问题 更多 >