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