gpt4 book ai didi

python - Python 卡住集的持久哈希

转载 作者:IT王子 更新时间:2023-10-29 01:14:29 26 4
gpt4 key购买 nike

如何将嵌套的 Python frozenset 对象转换为跨 Python session 和平台相同的唯一整数?

例如我在不同平台上从 hash() 得到不同的值

32 位

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a=frozenset([frozenset([1,2,3]),frozenset(['a','b','c'])]);
>>> hash(a)
1555175235

64 位

Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a=frozenset([frozenset([1,2,3]),frozenset(['a','b','c'])]);
>>> hash(a)
-6076998737938213053

最佳答案

How would you convert a nesting of Python frozenset objects into a unique integer that was the same across Python sessions and platforms?

不保证 AFAIK 哈希值是唯一的。事实上,在将它们用于查找表的地方(如在字典中),哈希冲突很常见。

就是说。如果你想要跨平台一致的、非唯一的“散列”,我会尝试使用标准库 hashlib .我不可能在不同的平台上尝试它,但我相信大多数在那里实现的算法(例如 MD5 算法)都是平台无关的。

我会为哈希算法提供排序集的腌制版本,以确保用于哈希的字符串始终相同。


编辑: 想添加一个基本示例:

>>> import cPickle as pkl
>>> import hashlib as hl
>>> s = frozenset([1,2,3])
>>> p = pkl.dumps(sorted(s)) #make sure you use the same pickle protocol on all platform!
'(lp1\nI1\naI2\naI3\na.'
>>> h = hl.md5(p)
<md5 HASH object @ 0xb76fb110>
>>> h.digest()
"\x89\xaeG\x1d'\x83\xa5\xbd\xac\xa7\x1c\xd9\x1d/2t" #this should be consistent

关于python - Python 卡住集的持久哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com