You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何合并键对应值为列表的多个字典?

合并两个值为列表的字典的正确方法

嘿,这个问题我熟!合并两个键对应值为列表的字典,核心需求就是共同键的列表要合并元素,独有键直接保留原列表,下面给你两种实用的实现方式:

方法一:基础手动合并(直观易懂)

这种方法逻辑清晰,适合新手理解,还能避免意外修改原字典的列表:

先明确你的输入字典(补全了d2的内容方便演示):

d1 = {'apple': ['5', '65'], 'blue': ['9', '10', '15', '43'], 'candle': ['15'], 'is': ['5', '6', '13', '45', '96'], 'yes': ['1', '2', '3', '11'], 'zone': ['5', '6', '9', '10', '12', '14', '18', '19', '23', '24', '25', '29', '45']}
d2 = {'apple': ['43', '47'], 'appricote': ['1', '2', '3', '4', '5', '6'], 'candle': ['20', '25'], 'is': ['100'], 'no': ['7', '8', '9']}

合并代码如下:

# 先复制d1的所有内容到新字典,避免修改原d1
merged_dict = d1.copy()

# 遍历d2的每一组键值对
for key, value_list in d2.items():
    if key in merged_dict:
        # 如果键已经存在,把d2的列表元素追加进去
        merged_dict[key].extend(value_list)
    else:
        # 如果键不存在,直接添加新的键值对(用copy防止后续修改d2影响合并结果)
        merged_dict[key] = value_list.copy()

合并后,merged_dict['apple']会变成['5', '65', '43', '47'],merged_dict['appricote']会完整保留d2的列表,完全符合需求。

方法二:用defaultdict简化代码(简洁高效)

要是你觉得手动判断键是否存在麻烦,可以用collections模块里的defaultdict,它会自动为不存在的键创建空列表,代码更简洁:

from collections import defaultdict

# 初始化一个默认值为列表的字典
merged_dict = defaultdict(list)

# 先把d1的所有列表元素加入
for key, value_list in d1.items():
    merged_dict[key].extend(value_list)

# 再把d2的所有列表元素加入
for key, value_list in d2.items():
    merged_dict[key].extend(value_list)

# 要是需要转换成普通字典,直接用dict()转换即可
merged_dict = dict(merged_dict)

额外需求:合并后去重

如果你的列表里有重复元素,想要合并后自动去重,只要稍微修改追加逻辑就行(能保持原元素顺序):

# 以方法一为例,修改extend部分
merged_dict[key].extend(item for item in value_list if item not in merged_dict[key])

内容的提问来源于stack exchange,提问作者Gerasimos Ragavanis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:06:50