Convertir una representación de cadena de una lista en un objeto de lista real [duplicado]
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 de forma segura un nodo de expresión o una cadena que contenga una expresión de Python. La cadena o nodo proporcionado solo puede consistir en las siguientes estructuras literales de Python: cadenas, números, tuplas, listas, dicts, booleanos y Ninguno.
Esto se puede utilizar para evaluar de forma segura cadenas que contienen expresiones de Python de fuentes que no son de confianza 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 un poco más segura (es decir, sin correr el riesgo de efectos secundarios no deseados o inyecciones de código malicioso) de esta manera:
fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})
Esta solución tiene la ventaja de no depender de módulos adicionales.