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

相关推荐
技术小黑1 小时前
TensorFlow学习系列11 | 优化器对比实验
人工智能·python·tensorflow2
2401_897190551 小时前
如何在保留功能逻辑的前提下隐藏网页菜单项(CSS 隐藏
jvm·数据库·python
倔强的石头1061 小时前
NFS网络文件系统下企业级数据库安装排障实战:环境变量失效与权限问题的深度解析
网络·数据库
2501_914245932 小时前
如何在phpMyAdmin中查询加密数据_AES_DECRYPT函数的实时解密展示
jvm·数据库·python
21439652 小时前
如何防止SQL注入利用存储过程_确保存储过程不拼字符串
jvm·数据库·python
2301_764150562 小时前
如何统计表单中已填写的特定类名输入框数量
jvm·数据库·python
2401_897190552 小时前
宝塔面板SSH提示连接被拒绝_检查服务器端口开关
jvm·数据库·python
2401_871696522 小时前
MySQL无法通过网络连接服务器_检查bind-address与访问权限
jvm·数据库·python
宸津-代码粉碎机2 小时前
Spring Boot 4.0虚拟线程实战续更预告:高阶技巧、监控排查与分布式场景落地指南
java·大数据·spring boot·分布式·后端·python