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

如何合并两个键集合完全相同的字典,实现嵌套字典键值对合并而非替换

合并键集合完全相同的嵌套字典(新增值而非替换)

嘿,这个需求挺常见的,而且因为你明确说两个字典的顶层键集合完全一致,实现起来特别顺手!我给你几个不同的实现方式,按需选就行~

首先先修正一下你给出的示例数据(Python里键需要加引号,且不能用0100这种八进制写法,除非你真的要八进制值,这里我默认你是想写十进制的100和400):

dict_1 = {"a": {"price": 4000}, "b": {"price": 14000}}
dict_2 = {"a": {"discount": 100}, "b": {"discount": 400}}

方法1:直观循环法(适合新手理解)

因为两个字典的顶层键完全匹配,我们可以直接遍历其中一个字典的键,然后把对应位置的子字典合并:

merged_dict = {}
for key in dict_1:
    # 用字典解包操作符`**`把两个子字典的键值对合并成新字典
    merged_dict[key] = {**dict_1[key], **dict_2[key]}

这个方法的逻辑很清晰:先创建一个空字典,然后逐个处理每个顶层键,把两个子字典的内容合并后存入新字典。因为子字典的键(price和discount)不重复,所以不会出现值被覆盖的问题。

方法2:字典推导式(更Pythonic,一行搞定)

如果喜欢简洁的代码,可以把上面的循环改成字典推导式,逻辑完全一样,只是写法更紧凑:

merged_dict = {key: {**dict_1[key], **dict_2[key]} for key in dict_1}

方法3:原地修改原有字典(无需创建新字典)

如果你不需要保留原来的dict_1,可以直接在dict_1的基础上更新,用字典的update()方法:

for key in dict_1:
    dict_1[key].update(dict_2[key])
# 此时dict_1就是合并后的结果:{"a": {"price": 4000, "discount": 100}, "b": {"price": 14000, "discount": 400}}

update()方法会把第二个字典的键值对添加到第一个字典中,同样因为子字典的键不重复,只会新增值而不会替换原有内容。

补充说明

因为你明确两个字典的顶层键完全相同,所以以上方法都不需要处理键缺失的情况。如果以后遇到键可能不一致的场景,只需要把遍历的键改成dict_1.keys() | dict_2.keys()(获取所有唯一键)即可,但这里完全用不上~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:19:04