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

在AWS Lambda Python 3中合并嵌套字典失败,调用update方法返回None求助

解决Python字典update返回None的问题

嘿,我来帮你搞定这个问题!你遇到的情况是Python字典的update()方法的特性导致的——这个方法是原地修改原字典,它的返回值就是None,所以你把a.update(b)赋值给变量c,得到的自然是None,而不是合并后的字典。

下面给你两种简单的解决方案,以及如果需要深度合并嵌套字典的处理方式:

方案1:先复制字典再更新

这种方法会保留原字典a和b的内容,生成一个新的合并后字典:

a = {'Action': 'DELETE', 'ResourceRecordSet': {'AliasTarget': {'HostedZoneId': 'BLABLABLA', 'EvaluateTargetHealth': False, 'DNSName': 'BLABLA'}, 'Type': 'A', 'Name': 'BLABLABLA'}}
b = {'Action': 'UPSERT', 'ResourceRecordSet': {'TTL': 60, 'Type': 'CNAME', 'Name': 'BLABLA', 'ResourceRecords': [{'Value': 'blablabla'}]}}

# 先复制a的所有内容到新字典c
c = a.copy()
# 用b的内容更新c(同名键会被b的内容覆盖)
c.update(b)
print(c)

执行后你就能得到合并后的字典,而不是None了。

方案2:用字典解包语法(Python 3.5+)

这是更简洁的写法,同样生成新字典,不修改原字典:

a = {'Action': 'DELETE', 'ResourceRecordSet': {'AliasTarget': {'HostedZoneId': 'BLABLABLA', 'EvaluateTargetHealth': False, 'DNSName': 'BLABLA'}, 'Type': 'A', 'Name': 'BLABLABLA'}}
b = {'Action': 'UPSERT', 'ResourceRecordSet': {'TTL': 60, 'Type': 'CNAME', 'Name': 'BLABLA', 'ResourceRecords': [{'Value': 'blablabla'}]}}

# 用解包语法合并两个字典,b的键会覆盖a的同名键
c = {**a, **b}
print(c)

额外说明:深度合并嵌套字典

上面两种方法都是直接替换同名的嵌套字典(比如ResourceRecordSet会被b的完全替换),如果你的需求是合并嵌套字典里的键(而不是直接替换整个嵌套字典),那需要自己写一个递归的深度合并函数,比如:

def deep_merge(a, b):
    # 先复制a的内容
    merged = a.copy()
    for key, value in b.items():
        # 如果当前值是字典,且a里也有这个键且对应的值也是字典,就递归合并
        if isinstance(value, dict) and key in merged and isinstance(merged[key], dict):
            merged[key] = deep_merge(merged[key], value)
        else:
            # 否则直接用b的值覆盖或添加
            merged[key] = value
    return merged

c = deep_merge(a, b)
print(c)

这个函数会逐层合并嵌套的字典,只有当键冲突时才会用b的值覆盖a的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:52:27