Python 字典高效合并:自定义处理重复键的完整指南

本文介绍在 python 中高效合并两个字典并灵活处理重复键的多种方法,涵盖运算符合并、字典推导式及可扩展函数实现,支持求和、取大值、列表聚合等自定义逻辑,兼顾性能与可读性。 本文介绍在 python 中高效合并两个字典并灵活处理重复键的多种方法,涵盖运算符合并、字典推导式及可扩展函数实现,支持求和、取大值、列表聚合等自定义逻辑,兼顾性能与可读性。在 Python 3.9+ 中,| 运算符提供了简洁的字典合并语法(如 dict1 | dict2),但其默认行为是后字典值覆盖前字典同名键值,无法满足对重复键进行自定义处理(如相加、取最大值、合并为列表等)的需求。Python 3.8 及更早版本则需借助其他方式。下面我们将系统性地介绍几种高效、可复用且符合 Pythonic 风格的解决方案。? 推荐方案:可配置的合并函数(兼容 Python 3.8+)以下是一个结构清晰、易于扩展的合并函数,使用集合交集定位冲突键,并通过可注入的 resolve_func 实现任意合并逻辑:def merge_dicts(d1: dict, d2: dict, resolve_func=lambda v1, v2: v1) -> dict: """ 合并两个字典,对重复键调用 resolve_func(v1, v2) 处理。 默认保留 d1 的值;可传入如 lambda a,b: a+b 或 max 等函数。 """ # 初步合并(d2 覆盖 d1,仅作基础骨架) merged = {**d1, **d2} # 兼容 Python 3.5+;或 d1 | d2(Python 3.9+) # 找出共有的键,并按需重写值 common_keys = d1.keys() & d2.keys() for k in common_keys: mergedk = resolve_func(d1k, d2k) return merged使用示例:dict1 = {'a': 1, 'b': 2, 'c': 5}dict2 = {'b': 3, 'c': 4, 'd': 6}# ? 值相加print(merge_dicts(dict1, dict2, lambda x, y: x + y))# 输出: {'a': 1, 'b': 5, 'c': 9, 'd': 6}# ? 取较大值print(merge_dicts(dict1, dict2, max))# 输出: {'a': 1, 'b': 3, 'c': 5, 'd': 6}# ? 合并为列表(保留全部值)print(merge_dicts(dict1, dict2, lambda x, y: x, y))# 输出: {'a': 1, 'b': 2, 3, 'c': 5, 4, 'd': 6}? 优势说明:该实现时间复杂度为 O(n + m),仅遍历一次公共键;语义明确、无冗余计算;resolve_func 支持任意 callable,高度可定制。立即学习"Python免费学习笔记(深入)"; RedClaw 百度推出的手机端万能AI Agent助手

相关推荐
ccddsdsdfsdf4 小时前
DBeaver怎么链接mongoDB
数据库·mongodb
AI玫瑰助手4 小时前
Python函数:默认参数的定义与注意事项
开发语言·python·信息可视化
weixin_468466854 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
小糖学代码4 小时前
LLM系列:环境搭建:5.Python-dotenv 环境变量管理
人工智能·python·深度学习·神经网络
丷丩5 小时前
Postgresql基础实践教程(十一)各种Join
数据库·postgresql·join
星夜夏空995 小时前
FreeRTOS学习(4)——内存映射
数据库·学习·mongodb
智慧物业老杨5 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
橙橙笔记5 小时前
Python的学习第一部分
python·学习
TheRouter6 小时前
AI Agent 记忆体系建设实战:短期、长期与工作记忆的工程实现
数据库·人工智能·oracle
Omics Pro6 小时前
首个!外源天然产物综合性代谢图谱
数据库·人工智能·算法·机器学习·r语言