[pyar] Necesito una estructura para deduplicar diccionarios complejos

Facundo Batista facundobatista en gmail.com
Jue Abr 30 17:41:06 ART 2015


2015-04-30 17:20 GMT-03:00 Tordek <kedrot en gmail.com>:

> El hash es recursivo, pero como estás guardando referencias a las copias que
> ya existen, no hace falta hashear el contenido de los valores, solo su ID.
> (Aunque no sé qué guardas en las hojas, supongo que una marca única, para
> mantener el id de la marca constanet)
>
> def hash(node):
>     return md5.new(str([(k, id(v)) for (k, v) in node.items])).digest()

La idea de usar el id() es muy buena!

La tomo.


> Buscás en dedup_store todos los árboles con el mismo hash. Si existe alguno,
> recorrés la lista y te fijás si alguno es lo que buscás. (Ahí depende de vos
> como se implemente ==, aunque imagino que el default alcanza). Si lo es,
> retornás el dato viejo.

Al principio hice eso. Después miré, con un ejemplo de 100 mil
palabras (casi tres millones de nodos), y todas las listas tenía 1 de
largo. Así que dejé de usar esas listas (que consumen memoria!) y puse
un if para que de última, si son distintos, devuelva el nuevo (sin
cachearlo... es un caso que creo que no va a pasar nunca, pero si
pasara, igual funca).

-- 
.    Facundo

Blog: http://www.taniquetil.com.ar/plog/
PyAr: http://www.python.org/ar/
Twitter: @facundobatista


More information about the pyar mailing list