Python字典update合并报TypeError:unhashable type:'dict'错误
错误产生原因
Python字典的键有强制要求:必须是可哈希的不可变类型(比如字符串、数字、元组),可变类型(比如字典、列表)不能作为字典键使用,否则就会抛出TypeError: unhashable type: 'dict'错误。
你的代码存在两个核心问题:
- 传给
d3.update()的参数是{d1:d2},相当于尝试把字典d1作为新构造字典的键,直接触发了上述类型错误。 - 循环逻辑完全偏离需求:就算不触发类型错误,这段代码也是反复把d1、d2整体作为键值对写入d3,根本不会把两个原字典里的姓名、成绩键值对拆分更新到d3里。
正确实现方案
根据你使用的Python版本,可以选下面任意一种写法实现合并:
- 兼容所有Python版本的循环update写法,修正传参逻辑即可:
d1={"adam smith":"A","judy paxton":"B+"} d2={"mary louis":"A","patrik white":"C"} d3={} for source_dict in (d1, d2): d3.update(source_dict) # 直接把遍历到的源字典传入update,自动合并所有键值对 print(d3) # 输出:{'adam smith': 'A', 'judy paxton': 'B+', 'mary louis': 'A', 'patrik white': 'C'}
- Python 3.5及以上版本支持的字典解包写法,代码更简洁:
d3 = {**d1, **d2}
- Python 3.9及以上版本支持的字典合并运算符写法:
d3 = d1 | d2
注意:如果d1和d2存在同名键,合并时靠后的字典(d2)中的值会覆盖前面字典(d1)的对应值,这是字典更新的默认规则。
内容的提问来源于stack exchange,提问作者shivam
相关产品推荐
相关产品推荐

