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助手

相关推荐
三8441 小时前
redis防御加固与安全基线
数据库·redis·安全·应急响应·防御
lhldsg1 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
泡海椒1 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb1 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
IT大白鼠2 小时前
MySQL 分布式集群系列 · 第四篇——实操部署指南:从零搭建生产级 MySQL NDB 集群
数据库·分布式·mysql
IT大白鼠2 小时前
MySQL 分布式集群系列 · 第三篇——核心原理精讲:NDB 自动分片、多主写入与数据同步
数据库·分布式·mysql
Elastic 中国社区官方博客2 小时前
教程:使用 ES|QL 进行威胁狩猎
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索·安全威胁分析
sanjiaomao3332 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
斑马1394 小时前
Linux软件编程学习笔记(十三)——数据库
数据库·oracle