Tengo una lista de nombres de variables, como esto:Dada una lista de nombres de variables en Python, ¿cómo puedo crear un diccionario con los nombres de variables como claves (a los valores de las variables)?
['foo', 'bar', 'baz']
(Originalmente preguntó cómo convertir una lista de variables Véase la respuesta de Greg Hewgill a continuación..)
¿Cómo se convierte a un diccionario donde las claves son los nombres de las variables (como cadenas) y los valores son los valores de las variables?
{'foo': foo, 'bar': bar, 'baz': baz}
Ahora que estoy volver a hacer la pregunta, se me ocurrió:
d = {}
for name in list_of_variable_names:
d[name] = eval(name)
Puede eso ser mejorados?
actualización, respondiendo a la pregunta (en un comentario) de por qué me gustaría hacer esto:
a menudo me encuentro con el operador% de cuerdas con un diccionario de nombres y valores para interpolar . A menudo, los nombres en la cadena son solo los nombres de las variables locales. Así que (con la respuesta más abajo) que pueda hacer algo como esto:
message = '''Name: %(name)s
ZIP: %(zip)s
Dear %(name)s,
...''' % dict((x, locals()[x]) for x in ['name', 'zip'])
Modding down. No veo ninguna situación razonable en la que quieras hacer eso, y no veo la manera de hacerlo sólido, y ciertamente no con la evaluación. ¿Qué sucede si el nombre de la lista de nombres oculta uno de los nombres de interés, etc. – ddaa
Respuesta a la actualización en respuesta a mi comentario: el modismo de Python para hacer eso (que no apoyo, pero he visto usado), es "string% locals()" directamente. – ddaa
Puede reemplazar 'dict ((x, locals() [...)' por solo 'vars()'. – jfs