[Python-es] Convertir de mutable a inmutable

Nekmo contacto en nekmo.com
Dom Abr 24 16:12:58 CEST 2011


Vale, entonces, por lo que entiendo, la idea es comparar si un
diccionario es igual a otro, ¿verdad? En tal caso, habría que tener en
cuenta que el orden de los valores puede cambiar, lo cual es un
problema... :|

Un cordial saludo:
-- Nekmo.

Sitio web: http://nekmo.com
Dirección de contacto: contacto en nekmo.com
XMPP/Jabber: contacto en nekmo.com
Identi.ca: http://identi.ca/nekmo
Diaspora: Nekmo



El día 24 de abril de 2011 13:43, Pepe Aracil <pepe en diselpro.com> escribió:
> Hola Nekmo.
>
> Creo que me he explicado mal, la idea de usar repr() no es para parsear JSON
> que para eso ya existe el módulo json.
> Mi intención es cachear peticiones JSON/RPC  que se traducen en diccionarios
> python en el lado del server. Para lo cual necesito que estos diccionarios
> puedan formar parte de las keys de un diccionario que contiene los
> resultados cacheados. Para tal fin hay que transformar estos diccionarios en
> objetos inmutables y repr() es una de las opciones, otra podria ser Pickle.
>
> Si las cadenas json/rpc son muy largas, simpre se pueden acortar en md5:
>
> jsonObj = { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
> result = doJsonMethod(jsonObj)
>
> hashable = md5.new(cPickle.dumps(jsonObj)).digest()
> cache[hashable] = result
>
> Salud.
>
>
> El 24 de abril de 2011 12:52, Nekmo <contacto en nekmo.com> escribió:
>>
>> Si usas repr no te va a funcionar. Python no es igual a la sintaxis de
>> Javascript (la cual es JSON). Por ejemplo, mientras que en JSON tienes
>> false, true y null, en Python tienes False, True y None, lo cual te
>> provocará a la hora de trabajar con el "pseudo JSON" bonitos errores
>> del tipo "False no está definida", además de que como tengas algo que
>> no sea un string en la key de un diccionario, a la hora de interpretar
>> el JSON también te petará (en el caso de usar el módulo JSON, te
>> petará al dumpear xD).
>>
>> Un cordial saludo:
>> -- Nekmo.
>>
>> Sitio web: http://nekmo.com
>> Dirección de contacto: contacto en nekmo.com
>> XMPP/Jabber: contacto en nekmo.com
>> Identi.ca: http://identi.ca/nekmo
>> Diaspora: Nekmo
>>
>>
>>
>> El día 23 de abril de 2011 14:24, tny <a.porrua en gmail.com> escribió:
>> > El lun, 18-04-2011 a las 18:24 +0200, Pepe Aracil escribió:
>> >> Hola Lista.
>> >>
>> >> Tengo que cachear objetos JSON, es decir puedo encontrarme con listas y
>> >> diccionarios
>> >> que son mutables y por tanto al no  ser "hashables" no pueden formar
>> >> parte
>> >> de las keys
>> >> de un diccionario.
>> >>
>> >> Una idea es pasar todos los objetos mutables (diccionarios y listas) a
>> >> inmutables (tuplas)
>> >> mediante una función recursiva.
>> >>
>> >> Ejemplo:
>> >> {"method":"foo", "params":["sota","caballo"]}   -->  (("method","foo"),
>> >> (params,("sota","caballo")))
>> >> Este sistema se me antoja algo "Gastón" en cuanto a ciclos CPU
>> >>
>> >> El otro método consiste en usar la representación en cadena del objeto
>> >> usando repr(objeto):
>> >> repr({"method":"foo", "params":["sota","caballo"]}) ->
>> >> '{"method":"foo",
>> >> "params":["sota","caballo"]}'
>> >>
>> >>
>> >> ¿Alguna idea más al respecto?
>> >>
>> >> Gracias.
>> >> _______________________________________________
>> >> Python-es mailing list
>> >> Python-es en python.org
>> >> http://mail.python.org/mailman/listinfo/python-es
>> >> FAQ: http://python-es-faq.wikidot.com/
>> >
>> > Voto por repr
>> >
>> > Y mucho mejor si deribas la clase de los objetos JSON y le añades el
>> > metodo hash, de modo que te cree el hash de la representación del json
>> >
>> >
>> > _______________________________________________
>> > Python-es mailing list
>> > Python-es en python.org
>> > http://mail.python.org/mailman/listinfo/python-es
>> > FAQ: http://python-es-faq.wikidot.com/
>> >
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


Más información sobre la lista de distribución Python-es