12
votes
temp = "['a','b','c']"
print type(temp)
#string

output = ['a','b','c']
print type(output)
#list

so i have this temporary string which is basically a list in string format . . . i'm trying to turn it back into a list but i'm not sure a simple way to do it . i know one way but i'd rather not use regex

if i use temp.split() I get

temp_2 = ["['a','b','c']"]
2
Why do you have to do this? - RyPeck
How did you get this string? That will usually tell you how to evaluate it—do the opposite of whatever you did to get the string. To reverse json.dumps, use json.loads, and so on. If you got it by repr, not everything can be reversed, and not everything that can be should be… but ast.literal_eval is the answer for things that can/should. - abarnert

2 Answers

20
votes

Use ast.literal_eval():

Safely evaluate an expression node or a Unicode or Latin-1 encoded 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.

>>> from ast import literal_eval
>>> temp = "['a','b','c']"
>>> l = literal_eval(temp)
>>> l
['a', 'b', 'c']
>>> type(l)
<type 'list'>
0
votes

You can use eval:

>>> temp = "['a', 'b', 'c']"
>>> temp_list = eval(temp)
>>> temp_list
['a', 'b', 'c']
>>> temp_list[1]
b