Подтвердить что ты не робот

Преобразование строкового представления списка в фактический объект списка

У меня есть строка, которая похожа на список, скажем:

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

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

4b9b3361

Ответ 1

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

Как указано в комментариях ast.literal_eval безопасно. Из документов:

Безопасно оценить выражение node или строку, содержащую Python выражение. Строка или node предоставляется может состоять только из следующие литеральные структуры Python: строки, числа, кортежи, списки, dicts, booleans и None.

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

Ответ 2

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

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

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

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

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