本文目录导读:

我来为你介绍几种Python字典合并的方法,从基础到进阶:
使用 update() 方法(最常用)
# 基础用法
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
# 方法1:直接修改原字典
dict1.update(dict2)
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 方法2:创建新字典
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
new_dict = {}
new_dict.update(dict1)
new_dict.update(dict2)
print(new_dict) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
使用 解包操作符(Python 3.5+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
# 合并多个字典
merged = {**dict1, **dict2}
print(merged) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 合并多个字典并添加新键值
merged = {**dict1, **dict2, 'e': 5}
print(merged) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
# 处理重复键(后者的值会覆盖前者)
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = {**dict1, **dict2}
print(merged) # {'a': 1, 'b': 3, 'c': 4}
使用 运算符(Python 3.9+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
# 合并创建新字典
merged = dict1 | dict2
print(merged) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 原地更新
dict1 |= dict2
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
处理重复键的实用案例
案例1:保留最大值
def merge_with_max(*dicts):
"""合并多个字典,相同的键保留最大值"""
result = {}
for d in dicts:
for key, value in d.items():
if key not in result or value > result[key]:
result[key] = value
return result
dict1 = {'a': 1, 'b': 3, 'c': 2}
dict2 = {'a': 5, 'b': 1, 'd': 4}
merged = merge_with_max(dict1, dict2)
print(merged) # {'a': 5, 'b': 3, 'c': 2, 'd': 4}
案例2:合并值为列表的字典
def merge_dict_lists(*dicts):
"""合并多个字典,相同的键的值合并为列表"""
result = {}
for d in dicts:
for key, value in d.items():
if key not in result:
result[key] = []
if isinstance(value, list):
result[key].extend(value)
else:
result[key].append(value)
return result
dict1 = {'a': [1, 2], 'b': [3]}
dict2 = {'a': [4], 'b': [5, 6], 'c': [7]}
merged = merge_dict_lists(dict1, dict2)
print(merged) # {'a': [1, 2, 4], 'b': [3, 5, 6], 'c': [7]}
案例3:嵌套字典深度合并
from collections.abc import Mapping
def deep_merge(dict1, dict2):
"""深度合并嵌套字典"""
result = dict1.copy()
for key, value in dict2.items():
if key in result and isinstance(result[key], Mapping) and isinstance(value, Mapping):
result[key] = deep_merge(result[key], value)
else:
result[key] = value
return result
dict1 = {'a': 1, 'b': {'x': 10, 'y': 20}}
dict2 = {'b': {'y': 30, 'z': 40}, 'c': 3}
merged = deep_merge(dict1, dict2)
print(merged) # {'a': 1, 'b': {'x': 10, 'y': 30, 'z': 40}, 'c': 3}
实际应用场景
配置文件合并
default_config = {
'host': 'localhost',
'port': 8080,
'debug': False,
'database': {
'name': 'app_db',
'user': 'root'
}
}
user_config = {
'port': 9000,
'debug': True,
'database': {
'password': 'secret123'
}
}
# 合并配置(用户配置优先)
final_config = deep_merge(default_config, user_config)
print(final_config)
# {'host': 'localhost', 'port': 9000, 'debug': True,
# 'database': {'name': 'app_db', 'user': 'root', 'password': 'secret123'}}
聚合多源数据
sales_q1 = {'product_A': 100, 'product_B': 200}
sales_q2 = {'product_B': 150, 'product_C': 300}
# 合并并累加销售额
def merge_sales(*dicts):
result = {}
for d in dicts:
for key, value in d.items():
result[key] = result.get(key, 0) + value
return result
total_sales = merge_sales(sales_q1, sales_q2)
print(total_sales) # {'product_A': 100, 'product_B': 350, 'product_C': 300}
| 方法 | Python版本 | 是否原地修改 | 性能 |
|---|---|---|---|
update() |
4+ | 是 | 中等 |
| 解包 | 5+ | 否 | 较快 |
| 运算符 | 9+ | 取决于用法 | 较快 |
| 自定义函数 | 任意 | 灵活 | 视实现而定 |
推荐:
- Python 3.5+:使用 解包(简洁且性能好)
- Python 3.9+:使用 运算符(语义清晰)
- 需要复杂逻辑:自定义合并函数
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播