Computing un hash md5 de una estructura de datos

Quiero calcular un hash md5 no de una cadena, sino de una estructura de datos completa. Entiendo la mecánica de una forma de hacer esto (despacho sobre el tipo de valor, canonicalizar el orden de las claves del diccionario y otra aleatoriedad, recurrir a subvalores, etc.). Pero parece el tipo de operación que generalmente sería útil, por lo que me sorprende que tenga que hacer esto yo mismo.

¿Hay alguna forma más simple en Python para lograr esto?

UPDATE: se ha sugerido pickle, y es una buena idea, pero el pickling no canoniza el orden de las claves del diccionario:

>>> 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

Respuestas a la pregunta(6)

Su respuesta a la pregunta