我如何从元组中获得持久性哈希?

时间:2018-12-27 04:28:04

标签: python list hash tuples

我需要从一个元组生成一个哈希。理想情况下,我希望能够从列表中进行操作,但这是不可能的。我需要一些可以使用哈希值生成元组的东西,以便最终以正确的顺序访问原始列表(其中的项将是字符串)。

这就是我要哈希的内容

l = ['x', 'y', 'z']
t = tuple(l)

我尝试使用hash(),但最终没有在Python会话中提供相同的哈希,这是我所需要的。

我需要哈希,因为我想基于该列表创建一个文件,并将哈希作为文件名。然后,我想查找文件名,并仅使用哈希即可访问列表项(以正确的顺序)。

我的理解是这是可能的,但我可能是错的。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

否,如果您的元组包含字符串并且内置hash(),则不可能。

在Python会话中,故意将字符串的哈希值设置为变量,因为在Python 3.4中,它导致了潜在的安全问题(PEP 456)。在Python 3.5中,此问题已通过在每个Python会话中使字符串的哈希值不同而得以解决。

我建议您创建自己的哈希函数以使其稳定,或者使用一些hashlib

答案 1 :(得分:0)

您可以使用快速的MD5,并且对于相同的输入将始终获得相同的结果。

import hashlib

def get_filename()
m = hashlib.md5()
for s in t:
    m.update(s)
fn = m.hexdigest() # => 'd41d8cd98f00b204e9800998ecf8427e'

正如user2357112所说,您无法从l重建fn;但是如果l保存在带有MD5哈希的文件中,则可以读取它。