Comment empêcher Python parse_qs d'analyser des valeurs uniques dans des listes?

StackOverflow https://stackoverflow.com/questions/1024143

  •  06-07-2019
  •  | 
  •  

Question

En python 2.6, le code suivant:

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

Donne le résultat suivant:

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

Ce qui signifie que même s'il n'y a qu'une seule valeur à tester, celle-ci est toujours en cours d'analyse dans une liste. Existe-t-il un moyen de s’assurer que, s’il n’ya qu’une valeur, elle ne soit pas analysée dans une liste, de sorte que le résultat ressemble à ceci?

{'test': 'test', 'test2': ['test2', 'test3']}
Était-ce utile?

La solution

Vous pourrez y remédier plus tard ...

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

Cependant, je ne pense pas que je le souhaiterais. Si un paramètre qui est normalement une liste arrive avec un seul jeu d'éléments, j'aurais alors une chaîne au lieu de la liste des chaînes que je reçois normalement.

Autres conseils

Si vous voulez un dictionnaire simple sans jamais avoir besoin de plusieurs valeurs avec la même clé, essayez:

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

Cela vous donnera un joli {'foo': 'bar', 'baz': 'qux'} . Notez que s'il existe plusieurs valeurs pour la même clé, vous n'obtiendrez que la dernière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top