convertir las entradas del diccionario en variables – python

¿Hay alguna forma en que los valores de un diccionario se asignen a sus claves para convertir las entradas del diccionario en variables? Probé esto

>>> d = {'a':1, 'b':2} >>> for key,val in d.items(): exec('exec(key)=val') exec(key)=val ^ SyntaxError: invalid syntax 

ACTUALIZACIÓN: Quizás debería haber sido más específico: en realidad estoy seguro de que los pares clave-valor son correctos porque anteriormente los definí como variables. Luego almacené estas variables en un diccionario (como pares clave-valor) y me gustaría reutilizarlas en una función diferente. Simplemente podría definirlos de nuevo en la nueva función, pero debido a que puedo tener un diccionario con aproximadamente 20 entradas, pensé que podría haber una forma más eficiente de hacerlo.

Puedes hacerlo en una sola línea con:

 >>> d = {'a': 1, 'b': 2} >>> locals().update(d) >>> a 1 

Vi esta solución en otro hilo . Aunque debes tener cuidado con la forma en que Python puede optimizar el acceso de locales / globales al usar este truco .

Nota

Creo que editar locals() así es generalmente una mala idea. Si crees que globals() es una mejor alternativa, ¡piénsalo dos veces! :-RE

Preferiría siempre usar un espacio de nombres:

 >>> from argparse import Namespace >>> d = {'a': 1, 'b': 2} >>> n = Namespace(**d) >>> na 1 

Esto era lo que estaba buscando:

 >>> d = {'a':1, 'b':2} >>> for key,val in d.items(): exec(key + '=val') 

Ya tienes un diccionario perfectamente bueno. Solo usa eso. Si sabe cuáles serán las claves y está absolutamente seguro de que esta es una idea razonable, puede hacer algo como:

 a, b = d['a'], d['b'] 

pero la mayoría de las veces, solo debes usar el diccionario. (Si usar el diccionario es incómodo, probablemente no esté organizando bien sus datos; solicite ayuda para reorganizarlos).

Considere la solución “Bunch” en Python: cargue las variables en un dict en el espacio de nombres . Sus variables terminan como parte de un nuevo objeto, no como locales, pero puede tratarlas como variables en lugar de entradas de dict.

 class Bunch(object): def __init__(self, adict): self.__dict__.update(adict) d = {'a':1, 'b':2} vars = Bunch(d) print vars.a, vars.b 

Utilice pandas:

 import pandas as pd var=pd.Series({'a':1, 'b':2}) #update both keys and variables var.a=3 print(var.a,var['a'])