Python 字典:类型错误:不可哈希类型:'list
我在用一个字典来填充另一个字典时遇到了麻烦。
假设“源”字典的键是字符串,每个键对应的值是一个自定义对象的列表。
我在创建目标字典时,完全按照创建“源”字典的方式来做,为什么这不管用呢?
我遇到了这个问题:
TypeError: unhashable type: 'list'
代码:
aTargetDictionary = {}
for aKey in aSourceDictionary:
aTargetDictionary[aKey] = []
aTargetDictionary[aKey].extend(aSourceDictionary[aKey])
错误出现在这一行:aTargetDictionary[aKey] = []
5 个回答
5
根据你的描述,情况有点不太对。如果 aSourceDictionary
是一个字典,那么你的 for 循环应该是能正常工作的。
>>> source = {'a': [1, 2], 'b': [2, 3]}
>>> target = {}
>>> for key in source:
... target[key] = []
... target[key].extend(source[key])
...
>>> target
{'a': [1, 2], 'b': [2, 3]}
>>>
6
这确实有点奇怪。
如果 aSourceDictionary
是一个字典,我觉得你的代码不可能出现你描述的那种错误。
这就引出了两个猜想:
你实际运行的代码和你提问时的代码不完全一样(可能是早期版本或后期版本?)
aSourceDictionary
实际上并不是一个字典,而是其他类型的结构(比如一个列表)。
65
你遇到的错误是因为在Python中,字典的键
必须是不可变类型
(如果键可以改变,就会出现问题),而列表是可变类型。
你的错误提示是说你试图用一个列表作为字典的键,如果想把它们作为字典的键,你需要把列表转换成元组。
根据Python文档:
唯一不可以作为键的值是包含列表或字典或其他可变类型的值,因为这些值是通过内容比较而不是对象身份比较的,原因是字典的高效实现需要键的哈希值保持不变。