[pyar] variable que referencia a otra

Javier Marcon javiermarcon en gmail.com
Jue Mar 20 15:21:59 ART 2014


Muchas gracias a todos, esta es la opción que voy a probar.

El 20/03/14 14:17, Roberto Alsina escribió:
> On 20/03/14 14:05, Javier Marcon wrote:
>> El 20/03/14 10:02, Facundo Batista escribió:
>>> 2014-03-20 9:35 GMT-03:00 Javier Marcon <javiermarcon en gmail.com>:
>>>
>>>> Gracias a todos. Que es lo malo de tener un diccionario que sea una
>>>> referencia a datos de un diccionario recursivo? Cual es la forma que
>>> Eso no suena malo, parece de lo más normal.
>>>
>>> Lo que es raro es que lo quieras hacer con *variables*.
>>>
>> En realidad yo lo quiero hacer con una lista que cada elemento de la
>> lista referencie a un elemento de un diccionario recursivo. Por ejemplo:
>>
>> Por ejemplo yo tengo esto:
>>
>> datos = {
>>      "a": "pepe",
>>      "b": {"b1": "casa", "b3": "ojota", "b4":
>>          [{"asd": {"aaa": 1, "bbb": False}}, {"dss": "asdf"}]},
>>      "d": {"rrr": True, "jj": 9}
>> }
>>
>> def retrieve(parametros=(), datos={}):
>>      z = ()
>>      for x in parametros:
>>          z = z + (datos[x], )
>>      return z
>>
>> print retrieve( ("a","b[b1]"), datos )
>> print retrieve( ("b[b4][0][asd][bbb]","d[jj]"), datos )
>>
>> Pero al correrlo me da error cauando quiere hacer el primer print:
>>          z = z + (datos[x], )
>> KeyError: 'b[b1]'
>>
>> Como puedo hacer eso pero para que funcione?
>
> En realidad lo que queres son árboles :-)
>
> Pero burno, primero, fijate que para obtener 'casa', lo que queres es
>
> >>> datos['b']['b1']
> 'casa'
>
> Yo usaría como parametros una tupla de listas, como (['a'], ['b',
> 'b1']) y definiría una funcioncita que hace las dereferencias (no lo
> probé):
>
>
> def deref (l):
>     v = datos
>     while l:
>         k = pop(l)
>         v = v[k]
>     return v
>
> De esa manera, si en retrieve haces deref(('b', 'b1)) te deberia
> devolver 'casa'
>
> Se podría hacer manteniendo la sintaxis que te gusta en los parametros
> usando eval y cosas asi, pero estas manipulando el scope de tu funcion
> y eso es una receta para romper todo en maneras imprevisibles. Mejor
> mantener los datos como datos.
>
> De todas formas, me huele muy feo que tengas los parámetros en ese
> formato, creo que todo este código es simplemente tratar de hacer
> funcionar algo con unos datos de entrada muy raros.
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>



More information about the pyar mailing list