[Python-es] Convertir de mutable a inmutable

Pepe Aracil pepe en diselpro.com
Dom Abr 24 18:14:07 CEST 2011


El 24 de abril de 2011 16:12, Nekmo <contacto en nekmo.com> escribió:

> 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... :|
>
>
Hola Nekmo.

Esta es otra de las razones por la que traduzco las cadenas JSON a objetos
python y posteriormente los vuelvo a serializar:

>>> import json
>>> repr(json.loads('{"sota":10, "caballo":11}'))
"{u'caballo': 11, u'sota': 10}"
>>> repr(json.loads('{"caballo":11, "sota":10}'))
"{u'caballo': 11, u'sota': 10}"


Salud.



> 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/
> >
> >
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110424/cce253de/attachment.html>


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