是否可以对列表
进行哈希处理?
例如,我知道可以对元组进行哈希:
>>> hash((1,2,3,4,5,6))
-319527650
但是是否可能对一个列表
进行哈希处理?
>>> hash([1,2,3,4,5,6])
hash_value
可能的解决方案:
是否可以对列表
进行哈希处理?
例如,我知道可以对元组进行哈希:
>>> hash((1,2,3,4,5,6))
-319527650
但是是否可能对一个列表
进行哈希处理?
>>> hash([1,2,3,4,5,6])
hash_value
可能的解决方案:
试一下:
>>> hash((1,2,3))
2528502973977326415
>>> hash([1,2,3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> hash(frozenset((1,2,3)))
-7699079583225461316
>>> hash(set((1,2,3)))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
由于元组(tuple
)和冻结集合(frozenset
)是不可变的,因此您可以获取它们的哈希值(hash
),而对于可变对象列表(list
)和集合(set
),则无法获取其哈希值。
hash((1,2,3))
得到的结果是2528502973977326415
,但是hash((1,2,4))
也得到了2528502973976161366
(在Python 2.7.9上测试)。 - cgogolinmd5sum
中的前几个和后几个数字(十六进制?);虽然不是绝对可靠,但感觉还不错。也许有一天我会被烧伤... - SO_fix_the_vote_sorting_bug如果你真的需要使用列表作为字典键,请尝试先将其转换为字符串。 my_list = str(my_list)
str()
更不容易。 - Jari TurkiaPython不允许您在字典中使用可变数据作为键,因为插入后的更改会使对象无法被找到。您可以使用元组作为键。
首先你需要将它转换为元组:
print(hash(tuple([1, 2, 3, 4, 5, 6])))