Frage

Mit Python2.4.5 (fragen Sie nicht!) Ich möchte eine Abfrage-Zeichenfolge analysieren und einen dict im Gegenzug bekommen. Muss ich es tun „von Hand“ wie folgt?

>>> qs = 'first=1&second=4&third=3'
>>> d = dict([x.split("=") for x in qs.split("&")])
>>> d
{'second': '4', 'third': '3', 'first': '1'}

Haben keine nützliche Methode in urlparse finden.

War es hilfreich?

Lösung

Sie haben zwei Möglichkeiten:

>>> cgi.parse_qs(qs)
{'second': ['4'], 'third': ['3'], 'first': ['1']}

oder

>>> cgi.parse_qsl(qs)
[('first', '1'), ('second', '4'), ('third', '3')]

Die Werte in der dict von cgi.parse_qs() zurück sind Listen statt Strings, um den Fall zu behandeln, wenn der gleiche Parameter mehrmals angegeben wird:

>>> qs = 'tags=python&tags=programming'
>>> cgi.parse_qs(qs)
{'tags': ['python', 'programming']}

Andere Tipps

Das löst das Ärgernis:

d = dict(urlparse.parse_qsl( qs ) )

persönlich würde ich erwarten, dass es zwei ein in urlparse in Wrapper gebaut sein. in den meisten Fällen würde ich nicht verwirft die redundante Parameter, wenn eine solche exist

Geist
import urlparse
qs = 'first=1&second=4&third=3&first=0'

print dict(urlparse.parse_qsl(qs))

OR

print urlparse.parse_qs(qs)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top