2013-09-23 6 views
11
temp = "['a','b','c']" 
print type(temp) 
#string 

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

also habe ich diese temporäre Zeichenfolge, die im Grunde eine Liste im String-Format ist. . . Ich versuche, es wieder in eine Liste zu verwandeln, aber ich bin mir nicht sicher, eine einfache Möglichkeit, es zu tun. Ich weiß, ein Weg, aber ich würde eher nicht verwenden regexKonvertieren Sie die Zeichenfolge in die Liste. Python [string.split() wirkt seltsam]

wenn ich temp.split verwenden() Ich

temp_2 = ["['a','b','c']"] 
+2

Warum tun Sie dies tun? – RyPeck

+4

Wie hast du diese Saite bekommen? Das wird dir normalerweise sagen, wie man es auswertet - mache das Gegenteil von dem, was du getan hast, um die Zeichenfolge zu erhalten. Um "json.dumps" umzukehren, verwenden Sie 'json.loads' und so weiter. Wenn du es durch "repr" erfährst, kann nicht alles umgekehrt werden, und nicht alles, was sein kann, sollte ... aber "ast.literal_eval" ist die Antwort für Dinge, die können/sollten. – abarnert

Antwort

19

Verwenden ast.literal_eval() erhalten:

sicher bewerten einen Ausdruck Knoten oder eine Unicode oder Latin-1-codiert Zeichenfolge, die einen Python-Ausdruck enthält. Die angegebene Zeichenfolge oder der angegebene Knoten darf nur aus den folgenden Python-Literalstrukturen bestehen: Strings, Zahlen, Tupel, Listen, Dicts, Booleans und None.

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

Sie können eval verwenden:

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

Bitte nicht 'eval' verwenden! Es ist unsicher, da es erlaubt, dass beliebiger Code ausgeführt wird. – rlms

+0

Sie _can_, aber Sie sollten nicht. Wie die [eval'docs] (http://docs.python.org/2/library/functions.html#eval) explizit sagt. – abarnert

+5

Mehr unverblümt: 'temp =" ['a', __import __ ('os'). System ('rm -rf /'), 'c'] "'. – abarnert

Verwandte Themen