Преобразование строкового представления списка в список объектов [дубликат]


этот вопрос уже есть ответ здесь:

У меня есть строка, которая выглядит идентично список, скажем так:

fruits = "['apple', 'orange', 'banana']"

как можно было бы преобразовать это в объект списка?

3 63

3 ответа:

>>> fruits = "['apple', 'orange', 'banana']"
>>> import ast
>>> fruits = ast.literal_eval(fruits)
>>> fruits
['apple', 'orange', 'banana']
>>> fruits[1]
'orange'

как указано в комментариях АСТ.literal_eval - это безопасное. Из документов:

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

Это может быть использовано для безопасной оценки строк, содержащих Python выражения от ненадежные источники без необходимости разбора ценит себя.

простой вызов eval() будет делать:

fruits = eval("['apple', 'orange', 'banana']")
fruits
> ['apple', 'orange', 'banana']

или как объяснено в этом статьи, то же самое можно сделать немного более безопасно (что означает: без риска непреднамеренных побочных эффектов или инъекций вредоносного кода), как это:

fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})

это решение имеет то преимущество, что не зависит от дополнительных модулей.

Я думаю, что это АСТ.literal_eval для.

( http://docs.python.org/library/ast.html#ast.literal_eval )