我需要从一个元组生成一个哈希。理想情况下,我希望能够从列表中进行操作,但这是不可能的。我需要一些可以使用哈希值生成元组的东西,以便最终以正确的顺序访问原始列表(其中的项将是字符串)。
这就是我要哈希的内容
l = ['x', 'y', 'z']
t = tuple(l)
我尝试使用hash()
,但最终没有在Python会话中提供相同的哈希,这是我所需要的。
我需要哈希,因为我想基于该列表创建一个文件,并将哈希作为文件名。然后,我想查找文件名,并仅使用哈希即可访问列表项(以正确的顺序)。
我的理解是这是可能的,但我可能是错的。有什么想法吗?
答案 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哈希的文件中,则可以读取它。