Python中使用dict.update()合并任意数量字典的问题求解
问题根源
dict.update()是原地修改字典的方法,执行后返回None,你将该方法的返回值赋值给变量,自然会得到None的结果- 你第二版代码的循环中写的
D.update(D)是让字典更新自身,完全没有实现多字典合并的逻辑,而且直接修改传入的原始字典也会产生不必要的副作用 - 你最初的两参数版本属于错误写法歪打正着:将
update的返回值赋值给first后first已经是None,你实际返回的是全局变量d1,刚好update修改了d1的内容才得到了正确输出,逻辑本身就不成立
修正后的代码
def d_update(*sequence): # 初始化空字典作为合并结果,避免修改传入的原始字典 merged = {} for d in sequence: # 把当前遍历到的字典内容合并到结果字典中 # 后续字典的同键名值会自动覆盖前面的,符合需求 merged.update(d) return merged # 测试用例 d1 = {'a': 1, 'b': 2, 'c': 3} d2 = {'a': 1, 'b': 2, 'c': 5} d3 = {'b': 4, 'd': 6} print(d_update(d1, d2, d3)) # 输出:{'a': 1, 'b': 4, 'c': 5, 'd': 6}
逻辑说明
- 先创建一个独立的空字典
merged用来存储合并结果,不会修改传入的任意原始字典 - 遍历所有传入的字典参数,依次调用
merged.update()把当前字典的键值对合并到merged中 - 若出现重复键,后面遍历到的字典的值会自动覆盖前面的值,完全符合题目要求
- 最后返回合并完成的
merged即可
内容的提问来源于stack exchange,提问作者PreacherBaby
相关产品推荐
相关产品推荐

