Python字典:types错误:不可用types:'列表'

我在从另一个字典开始填充python字典时遇到麻烦。

假设“源”字典有string作为键,并且每个值都有一个自定义对象的列表。

我正在创build我的目标字典,就像我一直在创build我的“源”字典一样,这怎么可能这不起作用?

我明白了

TypeError: unhashable type: 'list' 

代码:

 aTargetDictionary = {} for aKey in aSourceDictionary: aTargetDictionary[aKey] = [] aTargetDictionary[aKey].extend(aSourceDictionary[aKey]) 

错误是在这一行: aTargetDictionary[aKey] = []

你给出的错误是因为在python中,字典键必须是不可变的types(如果键可以改变,会有问题),list是一个可变types。

你的错误表明你试图使用一个列表作为字典键,如果你想把它们作为字典中的键, 你必须把你的列表变成元组

根据python文档 :

唯一不可接受的值types是包含列表或字典或其他可变types的值,这些值是通过值而不是对象标识进行比较的,原因是字典的高效实现需要密钥的哈希值保持不变

这确实很奇怪。

如果一个aSourceDictionary是一个字典,我不相信你的代码可能会以你描述的方式失败。

这导致了两个假设:

  1. 你实际运行的代码与你问题中的代码不一样(可能是早期版本或后期版本)?

  2. 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]} >>> 

它工作正常: http : aSourceDictionary ,你的aSourceDictionaryvariables可能有其他的数据types比字典

 aSourceDictionary = { 'abc' : [1,2,3] , 'ccd' : [4,5] } aTargetDictionary = {} for aKey in aSourceDictionary: aTargetDictionary[aKey] = [] aTargetDictionary[aKey].extend(aSourceDictionary[aKey]) print aTargetDictionary