Python 字典合并、求和大作战,轻松搞定各路数据
在使用 Python 采集来自不同渠道的数据,很多都是以字典的形式存储。将它们合并、处理是经常使用的进本操作,在本文中,我们将介绍多种合并和求和字典的方法。
合并词典是指涉及将多个词典中的键值对合并到一个词典中,适合整合来自不同来源的数据。字典求和指在合并字典时对键相同的相应值相加,适合在处理统计数值数据。
使用 "|" 求字典的并集
在 Python 3.9 ,引入了一个专用的并集运算符,用于轻松合并字典。
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "d": 4}
dict3 = dict1 | dict2
print(dict3)
使用 update() 方法合并字典
update() 方法组合两个字典,将一个字典中的键值对合并到另一个字典中。如果目标字典中已存在键,则更新该键的值。否则,将添加新的键值对。此方法不会对键值求和。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'd': 4}
dict1.update(dict2)
print(dict1) # 输出:{'a': 1, 'b': 3, 'd': 4}
使用循环合并字典
循环迭代两个字典中的项目并将它们添加到新词典中。如果新字典中已存在键,则更新该键的值。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'd': 4}
dict3 = {}
for key, value in dict1.items():
dict3[key] = value
for key, value in dict2.items():
dict3[key] = value
print(dict3) # 输出:{'a': 1, 'b': 3, 'd': 4}
使用解包方法合并字典
使用两个星号(**)对字典进行解包合并,此方法不会对相同键的值求和。
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "d": 4}
dict3 = {**dict1, **dict2}
print(dict3) # 输出:{'a': 1, 'b': 3, 'd': 4}
使用字典推导对键值求和
如果想合并两个字典并对相同的键进行求和,可以创建两个集合的键的并集,并从这些键创建一个新字典。get() 方法检索每个键的值,如果字典中不存在该键,则默认为 0。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'd': 4}
dict3 = {key: dict1.get(key, 0) + dict2.get(key, 0) for key in set(dict1) | set(dict2)}
print(dict3) # 输出:{'a': 1, 'b': 5, 'd': 4}
使用 collections 对键值求和
使用 Counter 从每个字典创建计数器。然后,合并计数器,对相同键的值求和。
from collections import Counter
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
count_dict1 = Counter(dict1)
count_dict2 = Counter(dict2)
count_dict3 = count_dict1 + count_dict2
print(dict(count_dict3)) # 输出:{'a': 1, 'b': 5, 'c': 4}
使用 defaultdict 设置一个字典为默认值,当访问一个不存在的键时,它会返回一个默认值而不是抛出 KeyError 异常。
from collections import defaultdict
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict3 = defaultdict(int, dict1)
for key, value in dict2.items():
dict3[key] += value
print(dict3)