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

如何合并键相似但值不同的两个Python字典?

合并两个字典并拼接对应列表值

你遇到的问题核心是列表加法不会原地修改原列表,而且直接遍历赋值时没处理键不存在的情况。以下是几种可行的解决方案:

方法一:遍历修改原字典b

这种方法直接修改字典b,把a的列表内容合并进去(a的列表在前,b的原列表在后):

a = {'bob': [1, 2], 'bill': [3, 4], 'steve': [1]}
b = {'bob': [4], 'bill': [7]}

for key, vals in a.items():
    if key in b:
        # 用列表加法生成新列表,赋值回b的对应键
        b[key] = vals + b[key]
    else:
        # 若b中没有该键,直接添加a的列表(用copy避免后续修改a影响b,可选)
        b[key] = vals.copy()

print(b)
# 输出: {'bob': [1, 2, 4], 'bill': [3, 4, 7], 'steve': [1]}

方法二:用字典推导式生成新字典

如果不想修改原字典a和b,直接生成合并后的新字典:

a = {'bob': [1, 2], 'bill': [3, 4], 'steve': [1]}
b = {'bob': [4], 'bill': [7]}

# 取所有键的并集,对每个键拼接a和b的列表(不存在则用空列表)
merged_dict = {
    key: a.get(key, []) + b.get(key, [])
    for key in set(a.keys()) | set(b.keys())
}

print(merged_dict)
# 输出: {'bob': [1, 2, 4], 'bill': [3, 4, 7], 'steve': [1]}

为什么之前的列表加法没生效?

如果你的代码类似b[key] + a[key]但没赋值,那只会生成一个新列表,不会修改b中原有的列表;如果b中没有对应的key,直接访问b[key]还会抛出KeyError。上述两种方法都处理了这两个问题:要么先判断键是否存在,要么用get方法默认返回空列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:30:51