Advertisement

9.Python 为什么list不能作为dictionary的key值

阅读量:

这个blog解决一个问题是:为什么list不能作为dictionary的key值

  • 列表缺失为元素分配哈希函数的能力
    • 为何Python未为列表配备合理分配哈希函数的方法?
1. list没有相应的hash函数
复制代码
    a = [1, 2]
    b = {a: 1} #使用a作为字典的key,运行后会报下面的错误
    TypeError: unhashable type: 'list'

说明list没有提供合理的hash函数

2. 为什么python没有给list提供一个合理的hash函数

为列表提供哈希函数可以从两个维度进行评估:一方面关注算法效率的提升幅度另一方面需考察内存占用的变化情况

复制代码
    a = [1, 2, 3]
    b = [1, 2, 3]
    # 如果分别以a,b作为字典的key的话,显然id(a) != id(b), 所以相同的值的list隐射不同的值,所以不能
    # 满足查询操作

如果以list的值作为list的hash值,

复制代码
    a = [1, 2]
    d = {a: 1} #以a作为key
    a.append(3)
    d[[1, 2]]  #会报错,查询不到该key
    d[[1, 2, 3]] #也会报错,因为在字典中对应的1是通过【1,2】进行mapping的。

全部评论 (0)

还没有任何评论哟~