TypeError: unhashable type
TypeError: unhashable type: ‘list’ 通常意味着您正在尝试使用列表作为哈希参数。这意味着当您尝试散列一个 不可散列的对象 时,它将导致错误。例如。当您使用列表作为 字典中的键时,这是无法完成的,因为无法对列表进行哈希处理。解决此问题的标准方法是将 list 转换为 tuple。
例子
my_dict = {'name': 'John', [1,2,3]:'values'}
print(my_dict)
输出
Traceback (most recent call last):
File "sample.py", line 3, in <module>
my_dict = {'name': 'John', [1,2,3]:'values'}
TypeError: unhashable type: 'list'
此错误表明 my_dict 键 [1,2,3] 是 List 并且 List 不是 Python中的可散列类型。字典键必须是不可变类型,而 list 是可变类型。
修复:将列表转换为元组
如果要将列表作为键放入 字典中,则必须将它们更改为元组。
my_dict = {'name': 'John', tuple([1,2,3]):'values'}
print(my_dict)
输出
{'name': 'John', (1, 2, 3): 'values'}
hash() 是一个内置的 python 方法,用于返回一个 唯一 的数字。这可以应用于任何用户定义的对象,一旦初始化就不会改变。此属性主要用于 字典键。
可散列对象的示例:
int, float, decimal, complex, bool, string, tuple, range, frozenset, bytes |
---|
Unhashable 对象的示例:
list, dict, set, bytearray, user-defined classes |
---|
元组和列表(tuple、list)
尽管 元组 可能看起来类似于列表,但它们通常用于不同的情况和不同的目的。元组是 不可变的,通常包含通过解包或索引访问的异构元素序列 。列表是可变的,它们的元素通常是同质的,可以通过遍历列表来访问。
散列(Hashing)
散列是计算机科学中的一个概念,用于创建 高性能的伪随机访问数据结构,其中大量数据将被快速存储和访问。 不可变对象或无法更改的对象是可 散列 的,并且它们具有一个永远不会改变的唯一值。散列函数是一个函数,它接受一个对象,比如一个字符串,比如“Java”,并返回一个固定大小的代码,假设返回值是一个 整数。