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
是一个字典,我不相信你的代码可能会以你描述的方式失败。
这导致了两个假设:
-
你实际运行的代码与你问题中的代码不一样(可能是早期版本或后期版本)?
-
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
,你的aSourceDictionary
variables可能有其他的数据types比字典
aSourceDictionary = { 'abc' : [1,2,3] , 'ccd' : [4,5] } aTargetDictionary = {} for aKey in aSourceDictionary: aTargetDictionary[aKey] = [] aTargetDictionary[aKey].extend(aSourceDictionary[aKey]) print aTargetDictionary