Convertir una representación de cadena de una lista en un objeto de lista real

Tengo una cadena que parece idéntica a una lista, digamos:

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

¿Cuál sería la forma de convertir eso en un objeto de lista?

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

Como se señala en los comentarios ast.literal_eval es seguro . De los documentos:

Evalúe con seguridad un nodo de expresión o una cadena que contenga una expresión de Python. La cadena o el nodo proporcionado solo puede consistir en las siguientes estructuras literales de Python: cadenas, números, tuplas, listas, dados, booleanos y ninguno.

Esto se puede usar para evaluar de forma segura cadenas que contienen expresiones de Python de fonts no confiables sin la necesidad de analizar los valores uno mismo.

Una simple llamada a eval() hará:

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

O como se explica en este artículo , lo mismo se puede lograr de forma más segura (es decir, sin correr el riesgo de efectos secundarios no deseados o inyecciones de código malintencionado) como esto:

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

Esta solución tiene la ventaja de no depender de módulos adicionales.

Creo que para eso es ast.literal_eval.

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