两个字典合并 ,key值部分相同,value 相加

Python
In [1]: x = {'a': 1, 'b': 2} ...: y = {'b': 3, 'c': 4} ...: In [2]: {**x,**y} Out[2]: {'a': 1, 'b': 3, 'c': 4} In [3]: from collections import Counter In [4]: dict(Counter(x)+Counter(y)) Out[4]: {'a': 1, 'b': 5, 'c': 4} In [5]: Counter(x) Out[5]: Counter({'a': 1, 'b': 2}) In [6]:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
In [ 1 ] :    x = { 'a' : 1 , 'b' : 2 }
   . . . :    y = { 'b' : 3 , 'c' : 4 }
   . . . :
 
In [ 2 ] : { * * x , * * y }
Out [ 2 ] : { 'a' : 1 , 'b' : 3 , 'c' : 4 }
 
In [ 3 ] : from collections import Counter
 
In [ 4 ] : dict ( Counter ( x ) + Counter ( y ) )
Out [ 4 ] : { 'a' : 1 , 'b' : 5 , 'c' : 4 }
 
In [ 5 ] : Counter ( x )
Out [ 5 ] : Counter ( { 'a' : 1 , 'b' : 2 } )
 
In [ 6 ] :
 

另外一种笨方法

Python
>>> x = { 'apple': 1, 'banana': 2 } >>> y = { 'banana': 10, 'pear': 11 } >>> for k, v in y.items(): ... if k in x.keys(): ... x[k] += v ... else: ... x[k] = v ... >>> x {'pear': 11, 'apple': 1, 'banana': 12}
1
2
3
4
5
6
7
8
9
10
11
>>> x = { 'apple' : 1 , 'banana' : 2 }
>>> y = { 'banana' : 10 , 'pear' : 11 }
>>> for k , v in y . items ( ) :
. . .      if k in x . keys ( ) :
. . .          x [ k ] += v
. . .      else :
. . .          x [ k ] = v
. . .
>>> x
{ 'pear' : 11 , 'apple' : 1 , 'banana' : 12 }
 

第三种办法

Python
def union_dict(*objs): _keys = set(sum([obj.keys() for obj in objs],[])) _total = {} for _key in _keys: _total[_key] = sum([obj.get(_key,0) for obj in objs]) return _total obj1 = {'a':1,'b':2} obj2 = {'a':1,'b':2} print union_dict(obj1,obj2)
1
2
3
4
5
6
7
8
9
10
11
def union_dict ( * objs ) :
     _keys = set ( sum ( [ obj . keys ( ) for obj in objs ] , [ ] ) )
     _total = { }
     for _key in _keys :
         _total [ _key ] = sum ( [ obj . get ( _key , 0 ) for obj in objs ] )
     return _total
 
obj1 = { 'a' : 1 , 'b' : 2 }
obj2 = { 'a' : 1 , 'b' : 2 }
print union_dict ( obj1 , obj2 )
 



  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值