Python 字典:TypeError:不可哈希类型:‘list’
- 2025-03-20 08:46:00
- admin 原创
- 34
问题描述:
我在从另一个字典开始填充 python 字典时遇到了麻烦。
我们假设“源”字典以字符串作为键,并且每个值都有一个自定义对象列表。
我正在创建目标词典,就像我创建“源”词典一样,这怎么可能不起作用呢?
我明白了
TypeError: unhashable type: 'list'
代码 :
aTargetDictionary = {}
for aKey in aSourceDictionary:
aTargetDictionary[aKey] = []
aTargetDictionary[aKey].extend(aSourceDictionary[aKey])
错误出现在这一行:aTargetDictionary[aKey] = []
解决方案 1:
你给出的错误是由于在python中,dictionary keys
必须是immutable types
(如果key可以改变的话,就会出现问题),而list是可变类型。
您的错误表明您尝试使用列表作为字典键,如果您想将列表作为字典键放入字典中,则必须将列表更改为元组。
根据python文档:
唯一不能作为键的值类型是包含列表或字典或其他可变类型的值,这些值通过值而不是对象标识进行比较,原因是字典的有效实现需要键的哈希值保持不变
解决方案 2:
这确实有些奇怪。
如果aSourceDictionary
是一本字典,我不相信你的代码会以你描述的方式失败。
这导致了两个假设:
您实际运行的代码与问题中的代码并不相同(可能是早期或更新版本?)
aSourceDictionary
实际上并不是一本字典,而是其他一些结构(例如,列表)。
解决方案 3:
根据您的描述,事情不合逻辑。如果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]}
>>>
解决方案 4:
它工作正常:http://codepad.org/5KgO0b1G,你的aSourceDictionary
变量可能具有除 dict 之外的其他数据类型
aSourceDictionary = { 'abc' : [1,2,3] , 'ccd' : [4,5] }
aTargetDictionary = {}
for aKey in aSourceDictionary:
aTargetDictionary[aKey] = []
aTargetDictionary[aKey].extend(aSourceDictionary[aKey])
print aTargetDictionary
解决方案 5:
你也可以使用 defaultdict 来解决这种情况。它如下所示:
from collections import defaultdict
#initialises the dictionary with values as list
aTargetDictionary = defaultdict(list)
for aKey in aSourceDictionary:
aTargetDictionary[aKey].append(aSourceDictionary[aKey])
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD