Присвойте значения вложенного словаря переменным, названным в честь ключей - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь присвоить значения вложенного словаря переменным, названным по их ключу. Я нашел этот код в Stackoverflow, но он печатает только пару ключей и значений:

def myprint(d):
for k, v in d.items():
    if isinstance(v, dict):
        myprint(v)
    else:
        print("{0} : {1}".format(k, v))

Я бы хотел, чтобы, например, если у меня в словаре есть следующее: {thisIsADummy : 37}

Я могу каким-то образом создать переменную с именем thisIsADummy, названную в честь ключа, со значением 37 Таким образом, мой ввод может быть print(thisIsADummy), а результат будет 37

Пожалуйста, дайте мне знать Если у кого-нибудь есть идеи, как сделать это максимально эффективно, потому что в этом словаре, вероятно, более тысячи пар. Спасибо.

РЕДАКТИРОВАТЬ: Использование exec работает хорошо, но в исходном сообщении я слишком упрощен. Мне нужно, чтобы переменная была словарем, поэтому, когда я открываю несколько файлов, я могу добавлять значения.

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Basi c Идея состоит в том, чтобы использовать функцию exe c, как показано ниже.

nat = {
    'abc': 1,
    'a123': 2,
    'a1b': 3,
    'b31': 4
}

for k, v in nat.items():
    exec("%s = %d" % (k, v))
    print(k, v)

print(abc, a123, a1b, b31)

Примечание: она будет работать только в том случае, если ключи соответствуют ограничениям имени переменной

1 голос
/ 05 августа 2020

Избегайте использования eval(), попробуйте setattr (я не уверен, что это лучший способ.):

import sys

d = {"thisIsADummy": 37, 'a': [123,2]}
for k, v in d.items():
    setattr(sys.modules[__name__], k, v)

a.append(1)
print(thisIsADummy, a)

Результат:

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