How to convert string representation of list to a list?
>>> import ast>>> x = '[ "A","B","C" , " D"]'>>> x = ast.literal_eval(x)>>> x['A', 'B', 'C', ' D']>>> x = [n.strip() for n in x]>>> x['A', 'B', 'C', 'D']
With
ast.literal_eval
you can safely evaluate an expression node or a string containing a Python literal or container display. The string or node provided may only consist of the following Python literal structures: strings, bytes, numbers, tuples, lists, dicts, booleans, andNone
.
The json
module is a better solution whenever there is a stringified list of dictionaries. The json.loads(your_data)
function can be used to convert it to a list.
>>> import json>>> x = '[ "A","B","C" , " D"]'>>> json.loads(x)['A', 'B', 'C', ' D']
Similarly
>>> x = '[ "A","B","C" , {"D":"E"}]'>>> json.loads(x)['A', 'B', 'C', {'D': 'E'}]
The eval
is dangerous - you shouldn't execute user input.
If you have 2.6 or newer, use ast instead of eval:
>>> import ast>>> ast.literal_eval('["A","B" ,"C" ," D"]')["A", "B", "C", " D"]
Once you have that, strip
the strings.
If you're on an older version of Python, you can get very close to what you want with a simple regular expression:
>>> x='[ "A", " B", "C","D "]'>>> re.findall(r'"\s*([^"]*?)\s*"', x)['A', 'B', 'C', 'D']
This isn't as good as the ast solution, for example it doesn't correctly handle escaped quotes in strings. But it's simple, doesn't involve a dangerous eval, and might be good enough for your purpose if you're on an older Python without ast.