ast.literal_eval
анализирует абстрактные деревья синтаксиса. У вас почти есть json, для которого вы можете использовать json.loads
, но вам нужны двойные кавычки, а не одинарные кавычки, чтобы словарные ключи были действительными.
import ast
result = ast.literal_eval("{'a': 1, 'b': 2}")
assert type(result) is dict
result = ast.literal_eval("[1, 2, 3]")
assert type(result) is list
Как плюс, это не имеет ни одного риска eval
, потому что он не получает в бизнесе оценки функций. eval("subprocess.call(['sudo', 'rm', '-rf', '/'])")
может удалить корневой каталог, но ast.literal_eval("subprocess.call(['sudo', 'rm', '-rf', '/'])")
непредсказуем, с вашей файловой системой нетронутой.