python dict.add_by_value(dict_2)?

2023-12-20

问题:

>>> a = dict(a=1,b=2    )
>>> b = dict(    b=3,c=2)

>>> c = ???

c = {'a': 1, 'b': 5, 'c': 2}

因此,这个想法是通过 int/float 值以最短的形式添加到字典中。 这是我设计的一种解决方案,但我不喜欢它,因为它很长:

c = dict([(i,a.get(i,0) + b.get(i,0)) for i in set(a.keys()+b.keys())])

我认为必须有一个更短/简洁的解决方案(也许与reduce和operator模块有关?itertools?)...有什么想法吗?


更新:我真的希望找到一些更优雅的东西,比如“reduce(operator.add, key = itemgetter(0), a+b)”。 (显然这不是真正的代码,但您应该明白这个想法)。但看来这可能是一个梦。


更新:仍在寻找更简洁的解决方案。也许 groupby 可以提供帮助? 我使用“reduce”/“groupby”提出的解决方案实际上并不简洁:

from itertools import groupby
from operator import itemgetter,add

c = dict( [(i,reduce(add,map(itemgetter(1), v))) \
              for i,v in groupby(sorted(a.items()+b.items()), itemgetter(0))] )

最简单的方法就是使用Counter https://docs.python.org/3/library/collections.html#collections.Counter

>>> from collections import Counter
>>> a = dict(a=1,b=2    )
>>> b = dict(    b=3,c=2)
>>> Counter(a)+Counter(b)
Counter({'b': 5, 'c': 2, 'a': 1})
>>> dict(Counter({'b': 5, 'c': 2, 'a': 1}))
{'a': 1, 'c': 2, 'b': 5}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python dict.add_by_value(dict_2)? 的相关文章

随机推荐