Converting a string representation of a list into an actual list object

PythonStringList

Python Problem Overview


I have a string that looks identical to a list, let's say:

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

What would be the way to convert that to a list object?

Python Solutions


Solution 1 - Python

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

As pointed out in the comments ast.literal_eval is safe. From the docs:

> Safely evaluate an expression node or a string containing a Python > expression. The string or node provided may only consist of the > following Python literal structures: strings, numbers, tuples, lists, > dicts, booleans, and None. > > This can be used for safely evaluating strings containing Python > expressions from untrusted sources without the need to parse the > values oneself.

Solution 2 - Python

A simple call to eval() will do:

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

Or as explained in this article, the same can be accomplished a bit more safely (meaning: without risking unintended side-effects or malicious code injections) like this:

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

This solution has the advantage of not depending on additional modules.

Solution 3 - Python

I think this is what ast.literal_eval is for.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMarkumView Question on Stackoverflow
Solution 1 - PythonfraxelView Answer on Stackoverflow
Solution 2 - PythonÓscar LópezView Answer on Stackoverflow
Solution 3 - PythonmgilsonView Answer on Stackoverflow