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

为何guests2.update(guests1)返回None而非更新后的字典?

问题分析与解决方法

你的代码输出None的核心原因是:dict.update()方法是原地修改字典,它的返回值固定为None,所以函数返回的是None,打印结果自然就是这个值。另外这种写法还会直接修改传入的Taylors_guests原字典,可能不符合你“生成新字典”的需求。

下面是几种正确的实现方式,都能返回合并后的新字典,且重复键以罗里的字典(guests1)的值为准:

方法1:创建副本后更新(兼容所有Python版本)

先复制泰勒的字典内容到新字典,再用罗里的字典更新这个副本,最后返回新字典:

def combine_guests(guests1, guests2):
    # 复制guests2的内容,避免修改原字典
    combined_dict = guests2.copy()
    # 用guests1的键值对更新副本,重复键会被guests1的值覆盖
    combined_dict.update(guests1)
    return combined_dict

Rorys_guests = { "Adam":2, "Brenda":3, "David":1, "Jose":3, "Charlotte":2, "Terry":1, "Robert":4}
Taylors_guests = { "David":4, "Nancy":1, "Robert":2, "Adam":1, "Samantha":3, "Chris":5}

print(combine_guests(Rorys_guests, Taylors_guests))

输出结果:

{'David': 1, 'Nancy': 1, 'Robert': 4, 'Adam': 2, 'Samantha': 3, 'Chris': 5, 'Brenda': 3, 'Jose': 3, 'Charlotte': 2, 'Terry': 1}

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

用字典解包语法直接生成新字典,先放泰勒的内容,再放罗里的内容,重复键自动被后者覆盖:

def combine_guests(guests1, guests2):
    return {**guests2, **guests1}

# 调用代码和输出结果与方法1一致

方法3:使用|合并运算符(Python 3.9+)

Python 3.9及以上版本支持用|直接合并字典,同样后面的字典会覆盖前面的重复键:

def combine_guests(guests1, guests2):
    return guests2 | guests1

# 调用代码和输出结果与方法1一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:35:59