cod*_*ack 54 python hash dictionary
我在从另一个字典开始填充python字典时遇到了麻烦.
假设"源"字典将字符串作为键,并且每个值都有一个自定义对象列表.
我正在创建我的目标字典,就像我创建我的"源"字典一样,这怎么可能不起作用?
我明白了
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
代码:
aTargetDictionary = {}
for aKey in aSourceDictionary:
aTargetDictionary[aKey] = []
aTargetDictionary[aKey].extend(aSourceDictionary[aKey])
Run Code Online (Sandbox Code Playgroud)
错误在这一行: aTargetDictionary[aKey] = []
Céd*_*ien 46
您给出的错误是由于在python中,字典键必须是不可变类型(如果键可以更改,则会出现问题),list是可变类型.
您的错误表明您尝试使用列表作为字典键,如果要将列表作为字典中的键,则必须将列表更改为元组.
根据python doc:
唯一不能作为键接受的值是包含列表或字典或其他可变类型的值,这些值通过值而不是按对象标识进行比较,原因是字典的有效实现需要键的哈希值保持不变
这确实很奇怪.
如果aSourceDictionary是字典,我不相信您的代码可能以您描述的方式失败.
这导致两个假设:
您实际运行的代码与您问题中的代码不同(可能是更早或更晚的版本?)
aSourceDictionary 实际上不是字典,而是一些其他结构(例如,列表).
根据你的描述,事情并没有加起来.如果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]}
>>>
Run Code Online (Sandbox Code Playgroud)