How to convert string representation of list to a list? How to convert string representation of list to a list? python python

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']

ast.literal_eval:

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, and None.


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.