为何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
相关产品推荐
相关产品推荐

