2010-01-30 8 views
8

Ich versuche, eine Liste von Argumenten zu erstellen, die ich in einer URL erhalte.Konvertieren einer Zeichenfolge in eine Liste in Python

beispiels ich habe:

user.com/?users=0,1,2 

Nun, wenn ich es in der Anfrage erhalten kommt es als String zurück. Ich möchte eine Liste von "0,1,2" [0,1,2]

machen
+2

entfernt die Django-Tag, da es nicht wirklich eine Django-Frage ist –

+2

Aber Django kann einige Unterstützung für die Analyse von URLs haben, die von Interesse sein könnten. –

Antwort

31

Verwenden Sie die split Methode. Beispiel:

>>> "0,1,2".split(",") 
['0', '1', '2'] 

Oder auch,

>>> [int(x) for x in "0,1,2".split(",")] 
[0, 1, 2] 
2

Um von "0,1,2" zu ['0', '1', '2'] zu gehen es ist nur "0,1,2".split(",")

Also wenn Sie es in einer Variablen users haben, dann users.split(",") wird Ihnen die Liste geben.

Wenn Sie sie als Ints anstelle von Strings benötigen, wäre es [int(x) for x in users.split(',')].

2

Um die Zeichenfolge in eine Liste zu konvertieren, verwenden Sie split.

Um die Liste der Zeichenfolgen in eine Liste von ganzen Zahlen zu konvertieren, verwenden Sie ein Listenverständnis mit int.

sie alle zusammen Also setzen, sieht es so etwas wie dieses:

s = '0,1,2' 
l = [int(x) for x in s.split(',')] 

Ergebnisse:

[1, 2, 3] 
+0

Ich rate nur, da ich das Framework nicht benutzt habe, aber ich könnte mir vorstellen, dass Django ihn nicht dazu bringen würde, die gesamte Abfragekette selbst zu analysieren, nicht? – danben

3
import ast 
x=ast.literal_eval('0,1,2') 
print(x) 
# (0, 1, 2) 

ast.literal_eval ist wie eval, aber völlig sicher, da es die Zeichenfolge Literale wie Strings beschränkt, Zahlen, Tupel, Listen, dicts, booleans und None.

Eine weitere Alternative, die noch nicht erwähnt, ist map zu verwenden:

x=map(int,'0,1,2'.split(',')) 
0

Sie folgenden Code verwenden:

s = 'user.com/?users=0,1,2' 
s.rpartition('?users=')[2].split(',') 
6

Diese Frage wurde ursprünglich markiert Django, also werde ich mit, dass vorgehen im Hinterkopf.

Innerhalb Ihrer View-Funktion hat das request-Objekt ein GET-Attribut, das eine Instanz von QueryDict ist. Wenn Sie schon immer wissen, dass Sie eine durch Kommata getrennte Liste von ganzen Zahlen für die Taste „Benutzer“ erhalten gehen Sie so etwas in Ihrer View-Funktion tun könnte:

users_list = request.GET('users', "").split(',') 

, dass Sie eine Liste von Zeichenketten geben, oder eine leere Liste, wenn "Benutzer" in GET nicht angegeben wurde.Wenn Sie eine Liste von ganzen Zahlen wollte könnte man es weiter mit einer Liste Verständnis verarbeiten:

users_list = [int(x) for x in users_list] 
-2

Sie haben eval Zeichenfolge konvertieren zu „echten Code“:

Beispiel:

>>> l = u"[('0','None'),('2','Taxable Goods'),('4','Shipping')]" 
>>> type(l) 
<type 'unicode'> 

>>> t = eval(l) 
>>> type(t) 
<type 'list'> 
+0

'eval' wird nicht empfohlen. –

+0

Er hat definitiv nach etwas anderem gefragt! –

Verwandte Themen