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

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

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

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

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

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

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

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

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

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

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

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

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

Я думаю, для этого и предназначен ast.literal_eval.

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