问题:
>>> 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))] )