web-dev-qa-db-fra.com

Comment convertir un dictionnaire pour interroger une chaîne en Python?

Après avoir utilisé cgi.parse_qs(), comment reconvertir le résultat (dictionnaire) en chaîne de requête? Vous recherchez quelque chose de similaire à urllib.urlencode().

86
Sam

Python 3

urllib.parse.urlencode (requête, doseq = False, [...])

Convertissez un objet de mappage ou une séquence de n-uplets à deux éléments, pouvant contenir des objets str ou bytes, en un encodage à pourcentage ASCII chaîne de texte.

- Python 3 urllib.parse docs

Un dict est un mappage.

Legacy Python

urllib.urlencode (query [ doseq])
Convertissez un objet de mappage ou une séquence de n-uplets à deux éléments en une chaîne "codée pour cent" ... une série de key=value paires séparées par '&' personnages...

- Python 2.7 urllibdocs

137

En python3, légèrement différent:

from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})

sortie: 'pram1=foo&param2=bar'

pour la compatibilité python2 et python3, essayez ceci:

try:
    #python2
    from urllib import urlencode
except ImportError:
    #python3
    from urllib.parse import urlencode
50
Johnny Zhao

Vous cherchez quelque chose exactement comme urllib.urlencode()!

Toutefois, lorsque vous appelez parse_qs() (distinct de parse_qsl() ), les clés de dictionnaire sont les noms de variable de requête uniques et les valeurs. sont des listes de valeurs pour chaque nom.

Afin de transmettre cette information à urllib.urlencode() , vous devez "aplatir" ces listes. Voici comment faire avec une liste de tuples:

query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)
5
Johnsyweb