Вычисление хеша md5 структуры данных

Я хочу вычислить хеш md5 не строки, а всей структуры данных. Я понимаю механика способа сделать это (отправка по типу значения, канонизация порядка ключей словаря и другая случайность, рекурсивный переход на подзначения и т. д.). Но это похоже на операцию, которая была бы в целом полезной, поэтому я Я удивлен, что мне самому нужно это сделать.

Есть ли какой-нибудь более простой способ в Python для этого?

ОБНОВЛЕНИЕ: 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
44
задан Ned Batchelder 24 March 2011 в 11:23
поделиться