Estructuras de datos

Catalin Lungu lcatalin en siadv.com
Vie Sep 10 11:54:25 CEST 2004


Si tienes razón con lo de los indices. Pero no los conozco. Lo que quiero es
una función donde yo le diga modifica el tipo del campo "Ncampo1" dentro de
la tabla "Ntabla1". O bien inserta el campo "Ncampo2" en la tabla "Ntabla2".
La función tiene que ser genérica, por esto mi idea era de pasarle la ruta
en una lista de tuplas ("TABLA","NTabla1", etc.). Por ejemplo si voy a
cambiar los tags en el fichero la función no se tiene que enterar.

Un saludo,



----- Original Message ----- 
From: "Hernán Martínez Foffani" <hernan en orgmf.com.ar>
To: "La lista de python en castellano" <python-es en aditel.org>
Sent: Friday, September 10, 2004 10:58 AM
Subject: RE: [Python-es] Estructuras de datos


> (leer este mensaje en fuente de letra monoespaciada.)
>
> > <TABLA>
> >     <TABLA_ID>Ntabla1<\TABLA_ID>
> > ... resto cortado...
> > <\TABLA>
> >
> > Lo leo y lo guardo de esta forma:
> > result = {'TABLA': [{'TABLA_ID': ['Ntabla1'], 'DESCRIPCION':
> > ['Descripcion1'], 'CAMPOS': [{'CAMPO': [{'CAMPO_ID': ['Ncampo11'],
> > 'TIPO': ['Tcampo11']}, {'CAMPO_ID': ['Ncampo12'], 'TIPO':
> > ['Tcampo12']}]}], 'FECHAHORA': ['Fechahora1']}, {'TABLA_ID':
> > ['Ntabla2'], 'DESCRIPCION': ['Descripcion2'], 'CAMPOS': [{'CAMPO':
> > [{'CAMPO_ID': ['Ncampo21'], 'TIPO': ['Tcampo21']}, {'CAMPO_ID':
> > ['Ncampo22'], 'TIPO': ['Tcampo22']}]}], 'FECHAHORA':
> > ['Fechahora2']}]}
> >
> > Para extraer valores bastante sencillo. Pero para insertar, o
> > modificar no tanto. Como parámetro le estoy pasando una lista de
> > tuplas [("TABLA","Ntabla1"),("CAMPOS",""),("CAMPO","Ncampo11")]. Esto
> > me devuelve {'CAMPO_ID': ['Ncampo11'], 'TIPO': ['Tcampo11']} (justo
> > lo que necesito).
> >
> > Por favor díganme como puedo insertar campos nuevos y modificar
> > valores de campos existentes.
>
> La estructura de datos es un diccionario de listas cuyos elementos
> son cadenas o diccionarios de listas cuyos elementos ... etc etc ...
> :-)
> Con ese tipo de estructura para acceder a los elementos lo haces
> alternando indices del tipo cadena (para el diccionario) y tipo
> entero (para la lista). Ej.
>
> Para el valor del campo 3 de la tabla 5:
>
>    data['TABLA'][3]['CAMPOS'][0]['CAMPO'][5]
>
>
> Para agregar usa append o insert:
>
>                     +----------------------- El numero de la tabla a
>                     |                        modificar dentro de la
>                     |                        lista empenzando de 0.
>                     |
>                     v      vvvvvvvvvvvvv---- Esto es siempre lo mismo.
> >>> result['TABLA'][0]['CAMPOS'][0]['CAMPO']
> [{'CAMPO_ID': ['Ncampo11'], 'TIPO': ['Tcampo11']},
> {'CAMPO_ID': ['Ncampo12'], 'TIPO': ['Tcampo12']}]
>
> >>> result['TABLA'][0]['CAMPOS'][0]['CAMPO'].append(
> {'CAMPO_ID': ['Ncampo13'], 'TIPO': ['Tcampo13']})
> >>> result['TABLA'][0]['CAMPOS'][0]['CAMPO']
> [{'CAMPO_ID': ['Ncampo11'], 'TIPO': ['Tcampo11']},
> {'CAMPO_ID': ['Ncampo12'], 'TIPO': ['Tcampo12']},
> {'CAMPO_ID': ['Ncampo13'], 'TIPO': ['Tcampo13']}]
> >>>
>
> Para modificar subindiza la lista:
>
> El elemento del campo a modificar ----------------+
>                                                   |
> El numero del campo a modificar -------------+    |
> empenzando de 0                              |    |
>                                              |    |
> Esto igual que antes -------+                |    |
>                             |                |    |
>                vvvvvvvvvvvvvvvvvvvvvvvv      v    v
> >>> result['TABLA'][0]['CAMPOS'][0]['CAMPO'][1]['TIPO'] =
> ['tCAMPO12']
> >>> result['TABLA'][0]['CAMPOS'][0]['CAMPO']
> [{'CAMPO_ID': ['Ncampo11'], 'TIPO': ['Tcampo11']},
> {'CAMPO_ID': ['Ncampo12'], 'TIPO': ['tCAMPO12']},
> {'CAMPO_ID': ['Ncampo13'], 'TIPO': ['Tcampo13']}]
> >>>
>
> Para encontrar los indices de las listas de tablas
> y campos usa lo que ya tiene para leer los valores.
>
> Alternativamente, aunque algo sucio, tambien podrias
> mirar si puedes alterar directamente sobre el resultado
> de la lectura.  Para que esto funcione la lectura de
> los datos del campo no deberían estar haciendo copia
> de los mismos.
>
> Acotacion al margen:
> - Pareciera que está sobrando el nivel CAMPOS en
> la estructura de datos.
>
> Saludos,
> -H.
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>




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