python - 不可散列的类型:字典中的“列表”
问题描述
我编写了一些代码来从第二个字典中获取新值并添加到新字典中。
这是两个字典:
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]]
在过去的几个小时里,我的头一直在发疯。我敢肯定它是如此之小
解决方案
这不是那么小。在继续您的流程之前,您需要了解一些概念。
字典允许您使用诸如字符串或整数之类的键而不是索引(如列表)来访问它们的值,对吗?好吧,幕后应该有一种机制来实现这一点,称为哈希。
每次将键:值对放入字典中时,都会为该键计算哈希值。对于不可变对象(创建后无法更改,只能重新创建的对象),对于相同的字符串或整数或其他不可变对象,哈希值始终相同,这就是字典使用键访问其值的方式。
另一方面,可变对象不能被散列。因此不适合用作字典中的键。并且list
是其中之一。
如果必须,您可以将列表转换为元组以在字典中将其用作键。
lst = [1, 2, 3]
tup = tuple(lst)
请记住,创建后不能更改元组的元素,例如;
tup[0] = 1
这就是为什么它是不可变的。如果您需要更改其值,则只能将其替换为另一个元组。
注意:如果需要将元组用于散列(这将使其可变),则元组也不能包含列表作为元素。
推荐阅读
- html - 对象中的javascript自动调用函数
- loops - Woocommerce 获取类别循环,排除另一个类别
- assembly - 使用汇编语言 MIPS 更改显示器 RGB 颜色
- flutter - ScrollController.jumpTo() "ScrollController 未附加到任何滚动视图"
- python - Flask 中的详细路由
- android - 如何获得相机支持的 18.5:9 或 18:9 比例?
- java - 如何使用 Android 更新 Firestore 中的数组元素?
- c# - 如何从其他屏幕保存对机会的更改?
- c++ - 如何使用成员c ++使用gtest测试基于私有类的行为
- java - 如何从微服务获取http响应状态码——zuul [java]