Как я это вижу, у вас есть два основных варианта.
Самый очевидный способ — использовать eval
для преобразования значения строку x
в пригодный для использования объект Python — в данном случае словарь dict_1
.
Обратите внимание, что eval
выполняет строку как код Python. Если строка исходит из ненадежного источника, то это довольно опасно. Вы должны использовать это с осторожностью и применять соответствующую очистку ко всем входным данным.
x = "dict_1"
dict_1 = {"a": "b", "c": "d"}
print(type(eval(x)))
# Prints <class 'dict'>
print(eval(x)['a'])
# Prints "b"
Другой способ — использовать locals()
. Это возвращает словарь переменных, определенных в локальной области видимости. Вы бы проиндексировали его с помощью x
, что дало бы вам сам словарь, как с eval
.
x = "dict_1"
dict_1 = {"a": "b", "c": "d"}
print(type(locals()[x]))
# Prints <class 'dict'>
print(locals()[x]['a'])
# Prints "b"
Теоретически использование locals()
для задания оказалось бы более безопасным, поскольку с eval
вы можете непреднамеренно выполнить произвольный код.
Еще раз, если исходит из ненадежного источника, вам следует выполнить некоторые базовые проверки работоспособности, например. проверьте, что переменная находится в области видимости и является словарем:
if x in locals() and type(locals()[x]) == dict:
print(locals()[x]['a'])
# Prints "b"
person
costaparas
schedule
04.01.2021