无法散列的类型:字典中的“列表”

时间:2019-04-08 03:03:02

标签: python python-3.x list dictionary

我写了一些代码来从第二个字典中获取新值并添加到新字典中。

这是两个字典:

a = {armani: jeans, dolce: gabbana}
b = {jeans: robo, jobs: versace}

这是代码: {k:b[v] for k,v in a.items() if v in b}

但是,我收到以下错误消息:unhashable type: 'list'我知道这可能是因为我的b[v]的值类似于[[20], [30], [35]]

过去几个小时我的头一直发疯。我敢肯定它太小了

1 个答案:

答案 0 :(得分:2)

这不是什么小事。在继续您的过程之前,您需要了解一些概念。

字典允许您使用键(例如字符串或整数)而不是索引(例如列表)来访问其值,对吗?嗯,应该有一种机制可以实现这一目标,称为哈希。

每次将key:value对放入字典中时,都会为该key计算一个哈希值。对于不可变对象(创建后无法更改的对象,只能重新创建),对于相同的字符串或整数或其他不可变对象,哈希值始终相同,这就是字典使用键访问其值的方式。

可变对象不能被散列。因此不适合用作字典中的键。 list是其中之一。

如果必须的话,可以将列表转换为元组,以便在字典中将其用作键。

lst = [1, 2, 3]
tup = tuple(lst)

请记住,创建后不能更改元组的元素,例如;

tup[0] = 1

这就是为什么它是不可变的。如果您需要更改其值,则只能将其替换为另一个元组。

注意:,如果需要将元组用于哈希(这会使它可变),则元组也不能包含列表作为元素。

相关问题