Python3.8合并字典如何实现相同键对应值追加而非覆盖
Python 3.8字典相同键值追加合并方案
方法1:原生字典手动判断(无额外依赖,兼容性最好)
逻辑为遍历待合并字典的键值对,判断键是否已存在于基础字典:
- 已存在:直接向值列表追加新值
- 不存在:将键对应的值初始化为包含当前新值的列表
示例代码:
# 初始化空基础字典 dict_base = dict() # 定义合并函数 def merge_dict(base: dict, new_dict: dict) -> None: for key, value in new_dict.items(): if key in base: base[key].append(value) else: base[key] = [value] # 测试用字典 dict_1 = {'Sedan': 'Accord','SUV': 'Pilot'} dict_2 = {'Sedan': 'Camry','SUV': 'Highlander'} # 执行合并 merge_dict(dict_base, dict_1) merge_dict(dict_base, dict_2) print(dict_base) # 输出符合预期:{'Sedan': ['Accord', 'Camry'], 'SUV': ['Pilot', 'Highlander']}
方法2:使用collections.defaultdict简化逻辑
使用标准库的defaultdict可以省略键存在性的手动判断,代码更简洁:
from collections import defaultdict # 初始化默认值为列表的基础字典 dict_base = defaultdict(list) dict_1 = {'Sedan': 'Accord','SUV': 'Pilot'} dict_2 = {'Sedan': 'Camry','SUV': 'Highlander'} # 合并逻辑 for d in [dict_1, dict_2]: for k, v in d.items(): dict_base[k].append(v) # 可选:转为普通字典类型 dict_base = dict(dict_base)
注意事项
- 如果待合并字典的值本身是列表类型,将
append改为extend即可避免生成嵌套列表 - 以上两种方法均原生支持Python 3.8,无需安装第三方依赖
内容的提问来源于stack exchange,提问作者FlyingPickle
相关产品推荐
相关产品推荐

