Python字典:TypeError:不可用类型:'list'

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:

唯一不能作为键接受的值是包含列表或字典或其他可变类型的值,这些值通过值而不是按对象标识进行比较,原因是字典的有效实现需要键的哈希值保持不变

  • @ 0xc0de:当错误说出别的东西时,代码说了些什么,我相信错误;) (3认同)

NPE*_*NPE 7

这确实很奇怪.

如果aSourceDictionary是字典,我不相信您的代码可能以您描述的方式失败.

这导致两个假设:

  1. 您实际运行的代码与您问题中的代码不同(可能是更早或更晚的版本?)

  2. aSourceDictionary 实际上不是字典,而是一些其他结构(例如,列表).


ron*_*akg 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]}
>>> 
Run Code Online (Sandbox Code Playgroud)