2009-06-21 4 views
29

In Python 2.6, der folgende Code:Wie man Python parse_qs davon abhält, einzelne Werte in Listen zu analysieren?

import urlparse 
qsdata = "test=test&test2=test2&test2=test3" 
qs = urlparse.parse_qs(qsdata) 
print qs 

gibt die folgende Ausgabe:

{'test': ['test'], 'test2': ['test2', 'test3']} 

Was bedeutet, dass, obwohl nur ein Wert für den Test besteht, ist es immer noch in eine Liste Parsen . Gibt es eine Möglichkeit, sicherzustellen, dass, wenn es nur einen Wert gibt, dieser nicht in eine Liste geparst wird, so dass das Ergebnis so aussehen würde?

{'test': 'test', 'test2': ['test2', 'test3']} 
+10

ist es nicht mehr überein, dass alle Werte-Liste und Sie müssen sich keine Sorgen machen, wenn es sich um eine Liste oder ein einzelner Wert ist, warum Sie sonst wollen würde? –

+3

Der HTTP-Standard bedeutet, dass es sich um eine Liste handeln muss. Es scheint nicht viele Alternativen zu geben. –

Antwort

24

Sie könnte es beheben danach ...

import urlparse 
qsdata = "test=test&test2=test2&test2=test3" 
qs = dict((k, v if len(v)>1 else v[0]) 
      for k, v in urlparse.parse_qs(qsdata).iteritems()) 
print qs 

Aber ich glaube nicht, ich würde dies wollen. Wenn ein Parameter, bei dem es sich normalerweise um eine Liste handelt, zufällig mit nur einem Elementsatz eintrifft, würde ich eine Zeichenfolge anstelle der Liste der Zeichenfolgen haben, die ich normalerweise erhalte.

99

Eine Bemerkung am Rande für jemanden nur ein einfaches Wörterbuch wollen und nie mehrere Werte mit dem gleichen Schlüssel benötigen, versuchen:

dict(urlparse.parse_qsl('foo=bar&baz=qux')) 

Dies wird Ihnen ein schönes {'foo': 'bar', 'baz': 'qux'}. Bitte beachten Sie, dass wenn Sie sind mehrere Werte für den gleichen Schlüssel, Sie erhalten nur die letzte.

+0

Gibt 'Parse_qsl()' nicht eine Liste von Schlüssel/Wert-Paaren (und kein Diktat)? –

+11

@MisterBhoot Ja, deshalb habe ich den 'dict (...)' Anruf darum herum. :) – tuomassalo

+0

Mein schlecht, sorry. Ich sollte jetzt früh anfangen zu schlafen. –

Verwandte Themen