python两个_多个字典合并相加

这只是符合比较正常的需求和场景。

一、适用合并两个字典(key不能相同否则会被覆盖),简单,好用。

1 A = {'a': 11, 'b': 22}
2 B = {'c': 48, 'd': 13}
3 #update() 把字典B的键/值对更新到A里
4 A.update(B)
5 print(A)

例子:要求写一段代码,实现两个字典的相加,不同的key对应的值保留,相同的key对应的值相加后保留。

dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"}

dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"}

如上示例得到结果为:

dictc = {"a":1,"b":5,"c":3,"d":9,"e":7,"m":9,"f":"hello","k":"world"}

本方法主要用到字典的推导式和.update()方法,一行代码解决:

a = {"a":1,"b":2,"c":3,"d":4,"f":"hello"}
b = {"b":3,"d":5,"e":7,"m":9,"k":"world"}

c = {x:a[x]+b[x] for x in a if x in b}  #两者共有的  列表推导式
print(c)
d=dict()
d.update(a)
d.update(b)
d.update(c)
print(d)
#下面是输出结果
{'b': 5, 'd': 9}
{'a': 1, 'b': 5, 'c': 3, 'd': 9, 'f': 'hello', 'e': 7, 'm': 9, 'k': 'world'}
Process finished with exit code 0

本例另一方法,用到dict.get(key):

dica = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'f': "hello"}
dicb = {'b': 3, 'd': 5, 'e': 7, 'm': 9, 'k': 'world'}
dic = {}
for key in dica:
    if dicb.get(key):         #判断dictb中是否存在这个key
        dic[key] = dica[key] + dicb[key]
    else:
        dic[key] = dica[key]
for key in dicb:
    if dica.get(key):
        pass
    else:
        dic[key] = dicb[key]

print(dic)

二、适用多种场合,多字典存在相同key需要合并相加的场景比较适用。

1 def sum_dict(a,b):
 2     temp = dict()
 3     # python3,dict_keys类似set; | 并集
 4     for key in a.keys()| b.keys():
 5         temp[key] = sum([d.get(key, 0) for d in (a, b)])
 6     return temp
 7 
 8 def test():
 9     #python3使用reduce需要先导入
10     from functools import reduce
11     #[a,b,c]列表中的参数可以2个也可以多个,自己尝试。
12     return print(reduce(sum_dict,[a,b,c]))
13 
14 a = {'a': 1, 'b': 2, 'c': 3}
15 b = {'a':1,'b':3,'d':4}
16 c = {'g':3,'f':5,'a':10}
17 test()

三、解包法和第一种效果(限制)一样,B吃掉A。

1 A = {'a': 11, 'b': 22}
2 B = {'a': 48, 'b': 13}
3 print({**A,**B})
欢迎补充一些较好质量的方法、思路及代码。(作者以为这类方法应该少用for if else,可以提高代码可视化)。