11
votes

Analyse de la chaîne de requête avec Urllib à Python 2.4

Utilisation de Python2.4.5 (Ne demande pas!) Je veux analyser une chaîne de requête et obtenir une dicte en retour. Dois-je le faire "manuellement" comme suit?

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


0 commentaires

3 Réponses :


23
votes

Vous avez deux options: xxx

ou xxx

Les valeurs de la dicte renvoyée par cgi.parse_qs () sont des listes plutôt que des chaînes, afin de gérer le boîtier lorsque le même paramètre est spécifié plusieurs fois: xxx


4 commentaires

Pourquoi c'est un tableau de retour? Je dois utiliser: [0] pour obtenir le résultat final des chaînes.


@Bin Chen: Votre question est un peu difficile, mais si vous demandez pourquoi les valeurs de la dicte renvoyées par cgi.parse_qs () sont des listes au lieu des chaînes, la réponse est que le même paramètre pourrait être spécifié plusieurs fois, auquel cas plusieurs valeurs doivent être retournées. Ceci est illustré par le dernier exemple de ma réponse.


La version QSL est utile pour ce type de construction: pour la clé, la valeur dans cgi.parse_qsl (QueryString): ...


S'il vous plaît noter, parse_qs fait maintenant partie de la bibliothèque UrLSPARSE. cgi.parse_qs est obsolète



9
votes

Ceci résout la gêne:

d = dict(urlparse.parse_qsl( qs ) )


1 commentaires

Parse_QSL a été ajouté en 2.6, à quel point il y a de parse_qs qui renvoie déjà un dict. Est-ce ce que vous vouliez dire par un intégré?



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

print dict(urlparse.parse_qsl(qs))

OR

print urlparse.parse_qs(qs)

0 commentaires