【发布时间】:2011-07-22 00:52:28
【问题描述】:
我想计算一个 md5 散列,而不是字符串,而是整个数据结构。我了解执行此操作的方法的机制(发送值的类型、规范化字典键顺序和其他随机性、递归到子值等)。但它似乎是一种通常有用的操作,所以我很惊讶我需要自己滚动这个。
在 Python 中有没有更简单的方法来实现这一点?
更新:建议使用 pickle,这是一个好主意,但 pickle 不会规范化字典键顺序:
>>> import cPickle as pickle
>>> import hashlib, random
>>> for i in range(10):
... k = [i*i for i in range(1000)]
... random.shuffle(k)
... d = dict.fromkeys(k, 1)
... p = pickle.dumps(d)
... print hashlib.md5(p).hexdigest()
...
51b5855799f6d574c722ef9e50c2622b
43d6b52b885f4ecb4b4be7ecdcfbb04e
e7be0e6d923fe1b30c6fbd5dcd3c20b9
aebb2298be19908e523e86a3f3712207
7db3fe10dcdb70652f845b02b6557061
43945441efe82483ba65fda471d79254
8e4196468769333d170b6bb179b4aee0
951446fa44dba9a1a26e7df9083dcadf
06b09465917d3881707a4909f67451ae
386e3f08a3c1156edd1bd0f3862df481
【问题讨论】:
-
我觉得这个建议有点脏,但是你能md5sum你的数据结构的pickled版本吗?
-
酸洗没有什么脏东西,只是不能满足哈希的需要。
-
哎呀,真可惜。我希望它可以为您节省大量的精力。 :)
标签: python data-structures md5