两个字典A = {'a': 1, 'b': 2, 'c': 3}, B = {'b': 4, 'c': 6, 'd': 8} 要合并这两个字典,键值同则相加。
两个字典如果不考虑键相同则相加的话,可以使用d1.update(d2)可以很方便合并,但这样的后面的字典到中的值会覆盖字典d1中的值。
>>> A = {'a': 1, 'b': 2}
>>> B = {'a': 8, 'c': 3}
>>> A.update(B)
{'a': 8, 'b': 2, 'c': 3}
如果要考虑两个字典,如果考虑键同则值相加的问题,可以使用下面的几种方法:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> for key,value in B.items():
... if key in A:
... A[key] += value
... else:
... A[key] = value
>>> dict(sorted(A.items(), key=lambda d:d[1]))
{'a': 1, 'b': 6, 'd': 8, 'c': 9}
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = {}
>>> for key in list(set(A) | set(B)):
... if A.get(key) and B.get(key):
... C.update({key: A.get(key) + B.get(key)})
... else:
... C.update({key: A.get(key) or B.get(key)})
{'c': 9, 'd': 8, 'a': 1, 'b': 6}
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> def dict_union(d1, d2):
... keys = d1.keys() | d2.keys()
... temp = {}
... for key in keys:
... temp[key] = sum([d.get(key,0) for d in (d1, d2)])
... return temp
>>> C = dict_union(A, B)
{'d': 8, 'a': 1, 'b': 6, 'c': 9}
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = {}
>>> for key1 in A:
... for key2 in B:
... if key1 in B:
... C[key1] = A[key1] + B[key1]
... else:
... C[key1] = A[key1]
... if key2 not in A:
... C[key2] = B[key2]
{'a': 1, 'd': 8, 'b': 6, 'c': 9}
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = {}
>>> for key in A:
... if B.get(key):
... C[key] = A[key] + B[key]
... else:
... C[key] = A[key]
>>> for key in B:
... if not A.get(key):
... C[key] = B[key]
{'a': 1, 'b': 6, 'c': 9, 'd': 8}
python实现两个字典相加
最近遇到了需要字典相加的操作,其中这分为两种。如下面例子所示
第一种是键相同的保持第一个字典中的值,键不同的直接添加到新字典中
例如dict1 = {'a': 1, 'b': 2}
dict2 = {'a': 2, 'c': 3}
Out: {'a': 1, 'b': 2, 'c': 3}
这种实现方式为
dict1 = {'a': 1, 'b': 2}
dict2 = {'a': 2, 'c': 3}
print({**dict1, **dict2})
还有一种就是如果遇
在数据处理过程中经常遇到求两个字典相加(并集),要求相同的键,值相加,不同的键,进行汇集,最后得出一个总的字典,自己可以先进行思考,利用已有的知识,是否马上在心里有解决方法
d1={'a':1,'b':1}
d2={'b':2,'c':2}
要求的结果:d1+d2={'a':1,'b':3,'c':2}
下面介绍两种方法:
自定义函数法
利用collections库
de...
在统计汇总游戏数据的时候,有些数据是是每天用字典存的,当我要对多天汇总的时候,就需要合并字典了。
如果key相同的话它们的值就相加。
不能用update方法,因为用update方法则相同的key的值会覆盖,而不是相加。
千言不如一码。
def union_dict(*objs):
_keys = set(sum([obj.keys() for obj in objs],[]))
方法1:使用循环遍历
可以通过循环遍历第一个字典的键值对,在遍历的过程中判断第二个字典是否也有相同的键,如果有则将对应的值相加,如果没有则直接添加到结果字典中。示例代码如下:
def merge_dict(x, y):
for k, v in x.items():
if k in y.keys():
y[k += v
else:
y[k = v
return y
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'c': 4, 'd': 5}
dict3 = merge_dict(dict1, dict2)
运行以上代码后,dict3将得到结果`{'a': 1, 'b': 2, 'c': 7, 'd': 5}`。
方法2:使用Counter函数
可以利用Python的Counter函数来实现字典的相加操作。Counter函数可以统计每个元素出现的次数并返回一个字典。通过将要相加的字典传入Counter函数,然后将返回的Counter对象相加,最后将结果转换为普通字典即可。示例代码如下:
from collections import Counter
x = {'a': 1, 'b': 2, 'c': 3}
y = {'c': 4, 'd': 5}
X, Y = Counter(x), Counter(y)
z = dict(X + Y)
运行以上代码后,字典z将得到结果`{'a': 1, 'b': 2, 'c': 7, 'd': 5}`。
以上是两种常见的方法来实现字典的相加操作。无论是使用循环遍历还是利用Counter函数,都可以达到合并两个字典的目的。
图解Linux命令之--badblocks命令
mingqiu09:
Shell中字符串排序的几种方法
weixin_42783087: