[pyar] Dict de listas de listas a csv

Claudio Freire klaussfreire en gmail.com
Lun Oct 5 17:08:34 ART 2015


Más vale, vos querés "explotar" el diccionario en varios diccionarios
que representan las filas implícitas.

Con una combinación de flatten y zip_longest deberías poder lograrlo:

>>> def flatten(x):
...    rv = []
...    if isinstance(x, list):
...        for i in x:
...           rv.extend(flatten(i))
...    else:
...        rv.append(x)
...    return rv
>>> import sys,csv,itertools
>>> w = csv.DictWriter(sys.stdout, ['a','b','c'])
>>> d = {'a':2,'b':[[3,4],5], 'c':[6,7,8]}
>>> D = [ dict(a=a or '', b=b or '', c=c or '') for a,b,c in itertools.izip_longest(*map(flatten, [d['a'],d['b'],d['c']])) ]
>>> D
[{'a': 2, 'c': 6, 'b': 3}, {'a': '', 'c': 7, 'b': 4}, {'a': '', 'c':
8, 'b': 5}]
>>> w.writeheader()
a,b,c
>>> w.writerows(D)
2,3,6
,4,7
,5,8



2015-10-05 16:40 GMT-03:00 Franco Rodríguez <franco.rodriguezf en gmail.com>:
> Hola chicos, cómo andan?
>
> Escribo por acá porque ya no sé cómo hacer con algo.
>
> Tengo que escribir un CSV con los valores que vienen en un dict, pero los
> values del dict pueden ser listas (inclusive listas de listas), y estos se
> deben escribir un valor por fila del csv. No encuentro la forma. Les paso
> varios ejemplos:
>
> el dict:
> a: 1,
> b: [2,1]
> c: [[3,4],[5]]
>
> debe escribirse como:
>
> a,b,c
> 1,2,3
> '','',4
> '',1,5
>
> el dict:
> a: 2,
> b: [[3,4], 5]
> c: [6,7,8]
>
> como:
>
> a,b,c
> 2,3,6
> '',4,''
> '',5,7
> '','',8
>
> el dict:
> a: [1]
> b: [[2],[3]],4]
> c: [[5],[6]]
>
> a,b,c
> 1,2,5
> '',3,6
> '',4,''
>
> La primer fila siempre va completa (con los primeros elementos de cada
> value), y nunca hay una fila con todos vacíos.
>
> Lo encaré usando pandas (sé muy poco), usando recursividad, usando índices,
> y la verdad es que me cansé.
> Por ahí alguien me puede iluminar aunque sea un poco, muchas gracias.
>
> (de momento me alcanzaría con algún método que me equipare, por ejemplo:
> el dict:
> a: 2,
> b: [[3,4], 5]
> c: [6,7,8],
> me lo convierta en:
> el dict:
> a: [[2,''],'', ''],
> b: [[3,4], 5, '']
> c: [[6,''],7,8]
> )
>
> _______________________________________________
> 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