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: merged[k] = resolve_func(d1[k], d2[k]) 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助手

相关推荐
QQ2422199791 天前
基于python+微信小程序的家教管理系统_mh3j9
开发语言·python·微信小程序
RSTJ_16251 天前
PYTHON+AI LLM DAY THREETY-SEVEN
开发语言·人工智能·python
阿波罗尼亚1 天前
数据库序列(Sequence)
数据库
郝学胜-神的一滴1 天前
深度学习优化核心:梯度下降与网络训练全解析
数据结构·人工智能·python·深度学习·算法·机器学习
Aision_1 天前
Agent 为什么需要 Checkpoint?
人工智能·python·gpt·langchain·prompt·aigc·agi
清水白石0081 天前
《Python性能深潜:从对象分配开销到“小对象风暴”的破解之道(含实战与最佳实践)》
开发语言·python
Junsir大斗师1 天前
Nginx服务器代理Postgresql-16后端数据库
数据库·nginx
Je1lyfish1 天前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
Land03291 天前
RPA工具选型技术指南:架构差异与实测数据
python·自动化·rpa
kafei_*1 天前
VScode 添加 UV虚拟环境方法
vscode·python·uv