Python присвоить переменным - PullRequest
0 голосов
/ 03 августа 2020

У меня есть словарь, и я хочу присвоить переменным (названным в честь ключей в dict) значения (соответствующие значения в dict). Примерно так:

dictionary = {'n': 5, 'a': [1, 2, 3, 4, 5]}
assign(dictionary)
print(n)
print(a)

>> 5
>> [1, 2, 3, 4, 5]

Пробовали:

for key in dictionary:
    eval(f"{key} = {dictionary[key]}")

Но обнаруженный eval не поддерживает присвоение переменных. Знаете как?

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

В качестве обходного пути вы можете создать атрибуты с такими же именами, что и ключи словаря:

from types import SimpleNamespace

dictionary = {'n': 5, 'a': [1, 2, 3, 4, 5]}
attribs = SimpleNamespace(**dictionnary)
print(attribs.n)  # -> 5
print(attribs.a)  # -> [1, 2, 3, 4, 5]

Предупреждение: это работает, только если ключи являются строками, совместимыми с Python именами

0 голосов
/ 03 августа 2020

Измените eval на exec, поскольку присваивание - это оператор, который нужно выполнить, а не выражение, которое нужно оценить.

Изменить: как указано в комментариях, exe c не изменится локально переменные внутри функции (поскольку Python 3 сделал ее функцией, см. https://bugs.python.org/issue4831). Помните об этом и используйте exe c только при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...