El vie, 12-03-2010 a las 12:32 +0100, Oswaldo Hernández escribió: > Arnau Sanchez escribió: > > On 12/03/10 11:54, Oswaldo Hernández wrote: > > > >> "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, ... > > > > A falta de ver el código, yo diría que es lo suficientemente pythonica. > > > >> Me gustaría hacerlo de una forma mas pythonica. Estoy intentando hacerlo > >> con expresiones regulares pero me temo que regex no es mi fuerte > > > > Yo empezaría a jugar con algo así: > > > > dict(re.findall("(\S+)\s*=\s*(\S+)", s)) > > Funciona perfectamente!!!, Magia!!!, algún dia me tendrás que explicar > que significa :)
dict(re.findall("(\S+)\s*=\s*(\S+)", s)) findall te da una lista con todo lo que cumpla una expresión entre parentesis. \s "matchea" con todo lo que sea un espacio (pilla espacios, tabuladores, etc) \S "matchea" con todo lo que no sea un espacio con el + se está indicando que tiene que haber uno o más. Con el * se indica que puede haber cero o más. Si combinamos todo esto, tenemos que las "claves" van a cumplir la primera expresión \S+ que está entre paréntesis y los valores van a cumplir la segunda expresión \S+. No se si lo he explicado bien. Las expresiones regulares son una herramienta muy potente.
signature.asc
Description: Esto es una parte de mensaje firmado digitalmente
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/