TypeError: unhashable type

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 
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”,并返回一个固定大小的代码,假设返回值是一个 整数

你可能感兴趣的:(TypeError,Python,数据结构)