相关疑难解决方法(0)

python dict.add_by_value(dict_2)?

问题:

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

>>> c = ???

c = {'a': 1, 'b': 5, 'c': 2}
Run Code Online (Sandbox Code Playgroud)

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

c = dict([(i,a.get(i,0) + b.get(i,0)) for i in set(a.keys()+b.keys())])
Run Code Online (Sandbox Code Playgroud)

我认为必须有一个更短/更简洁的解决方案(可能与reduce和操作员模块有关吗?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))] )
Run Code Online (Sandbox Code Playgroud)

python dictionary code-golf

9
推荐指数
5
解决办法
2053
查看次数

将字典的值添加到另一个字典

我想将字典的值添加到另一个字典中.例如:

adict = {1: {'a': 13, 'b': 19, 'c': 15}, 2: {'a': 7, 'b': 2, 'c': 0}}
Run Code Online (Sandbox Code Playgroud)

如果我们加入{1: {'a': 3, 'b': 9, 'c': 23}}adict

然后adict应该是:

{1: {'a': 16, 'b': 28, 'c': 38}, 2: {'a': 7, 'b': 2, 'c': 0}}
Run Code Online (Sandbox Code Playgroud)

如果我们添加,{3: {'a': 4}}那么adict现在应该是:

{1: {'a': 16, 'b': 28, 'c': 38}, 2: {'a': 7, 'b': 2, 'c': 0}, 3: {'a': 4}}
Run Code Online (Sandbox Code Playgroud)

如果我们添加 {2: {'a': 1, 'b': 8, 'c': 27, 'd': 11}}

然后adict应该是:

{1: {'a': 16, 'b': 28, 'c': …
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
252
查看次数

标签 统计

python ×2

code-golf ×1

dictionary ×1