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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
>>> 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.
Method 2
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.
Method 3
I think this is what ast.literal_eval is for.
( http://docs.python.org/library/ast.html#ast.literal_eval )
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0