Search code examples
pythonstringlisttext-parsing

How to convert string representation of list to a list


I was wondering what the simplest way is to convert a string representation of a list like the following to a list:

x = '[ "A","B","C" , " D"]'

Even in cases where the user puts spaces in between the commas, and spaces inside of the quotes, I need to handle that as well and convert it to:

x = ["A", "B", "C", "D"] 

I know I can strip spaces with strip() and split() and check for non-letter characters. But the code was getting very kludgy. Is there a quick function that I'm not aware of?


Solution

  • >>> 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:

    Evaluate an expression node or a string containing only 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, sets, booleans, None and Ellipsis.

    This can be used for evaluating strings containing Python values without the need to parse the values oneself. It is not capable of evaluating arbitrarily complex expressions, for example involving operators or indexing.