python 字典天然不允许重复键,但可通过预处理原始键值序列,自动合并同键的多个值为列表,避免手动去重和重构,提升大数据量字典(如 10k 行)的构建效率与健壮性。
python 字典天然不允许重复键,但可通过预处理原始键值序列,自动合并同键的多个值为列表,避免手动去重和重构,提升大数据量字典(如 10k 行)的构建效率与健壮性。
在 Python 中,字面量字典(如 {"A": "Red", "A": "Blue"})无法真正保留重复键——解释器会静默覆盖,最终仅保留最后一个赋值(即 "A": "Green")。因此,所谓“修复重复键字典”,本质是从原始键值对序列出发,重新聚合数据,而非修改已定义的非法字典字面量。
最实用、可扩展的自动化方案是:将原始数据视为「交替出现的键-值序列」(例如元组 ("A", "Red", "A", "Blue", "A", "Green", ...)),然后遍历该序列,动态构建目标结构:
def merge_duplicate_keys(pairs):
"""
将扁平键值序列(长度为偶数)转换为支持多值的字典:
同一键的后续值自动转为列表;单值保持原类型(str/int等)。
"""
result = {}
# 每次取两个元素:key, value
for i in range(0, len(pairs), 2):
if i + 1 >= len(pairs):
break
key, value = pairs[i], pairs[i + 1]
if key in result:
# 已存在:若当前值为列表则追加;否则升格为列表
if isinstance(result[key], list):
result[key].append(value)
else:
result[key] = [result[key], value]
else:
result[key] = value
return result
# 示例使用
raw_data = ("A", "Red", "A", "Blue", "A", "Green", "B", "Yellow", "C", "Black")
merged = merge_duplicate_keys(raw_data)
print(merged)
# 输出: {'A': ['Red', 'Blue', 'Green'], 'B': 'Yellow', 'C': 'Black'}
✅ 关键优势:
- 完全自动化,适配任意长度的键值序列(包括 10k+ 条目);
- 保持语义清晰:单值不强制转列表,多值才升格,符合直觉;
- 兼容 PyCharm:可直接粘贴运行,支持断点调试与类型提示(添加 from typing import Union, List, Dict, Any 可增强 IDE 支持)。
⚠️ 注意事项:
- 此方法要求原始数据严格按 key, value, key, value... 顺序排列;若数据来自文件或字符串,建议先用正则或 split() 解析为规范元组/列表;
- 避免使用 dict = {...} 作为变量名(会遮蔽内置 dict 类型);推荐改用 data, mapping 等名称;
- 若需统一输出格式(所有值均为列表),可在最后用 {k: v if isinstance(v, list) else [v] for k, v in merged.items()} 统一处理。
掌握这种“序列驱动字典构建”思路,不仅能解决重复键问题,还可延伸至 CSV 解析、配置文件归并、API 响应标准化等真实场景——让数据结构真正服务于业务逻辑,而非被语法限制所束缚。










