[Python-es] Cadena "a=1 b = 2" a diccionario

Francisco Palm francisco.palm en gmail.com
Vie Mar 12 13:48:52 CET 2010


Mis 2 lochas

2010/3/12 Oswaldo Hernández <listas en soft-com.es>:
> Hola,
>
> Tengo una cadena compuesta por pares de valores relacionados con el signo
> '=' y separados por espacios, ademas, los valores de cada par pueden ir
> pegados al signo igual o separados por espacios:
>
>    "dbname=bd user = usuario host= 192.168.22.5"
>
> Quiero convertirla a diccionario de forma que quede:
>    {"dbname":"bd", "user":"usuario", "host":"192.168.22.5"}
>
> Lo estoy haciendo de una forma bastante burda: elimino espacios a los lados
> del signo '=', luego separo los pares con split, ...
>
> Me gustaría hacerlo de una forma mas pythonica. Estoy intentando hacerlo con
> expresiones regulares pero me temo que regex no es mi fuerte :(
>
> ¿Sabeis alguna forma pythonica de hacerlo?

flat = sum([ x.strip().split() for x in "dbname=bd user = usuario
host= 192.168.22.5".split("=")], [])

# forma alternativa flat = [y for sub in [ x.strip().split() for x in
"dbname=bd user = usuario host= 192.168.22.5".split("=")] for y in
sub]

dict([ (flat[i],flat[j]) for (i,j) in
zip(range(0,len(flat),2),range(1,len(flat),2)) ])

En Python 3 con comprensiones de diccionario sería

{ flat[i] : flat[j] for (i,j) in
zip(range(0,len(flat),2),range(1,len(flat),2)) }

Saludos

F. Palm

-- 
--------------------------------------
fpalm en ula.ve
francisco.palm en gmail.com

cel: 0414 5109177, 0426 5721730
tel: 0274 6352001

----
Yo creo que todavía no es demasiado tarde para construir una utopía
que nos permita compartir la tierra. Gabriel García Márquez.



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