Dictionnaire Python vers les paramètres d'URL


124

J'essaie de convertir un dictionnaire Python en une chaîne à utiliser comme paramètres d'URL. Je suis sûr qu'il existe une meilleure façon, plus pythonique , de faire cela. Qu'Est-ce que c'est?

x = ""
for key, val in {'a':'A', 'b':'B'}.items():
    x += "%s=%s&" %(key,val)
x = x[:-1]

Réponses:


252

Utilisez urllib.urlencode(). Il prend un dictionnaire de paires clé-valeur, et le convertit sous une forme adaptée à une URL (par exemple, key1=val1&key2=val2).

Si vous utilisez Python3, utilisez urllib.parse.urlencode()

Si vous souhaitez créer une URL avec des paramètres répétitifs tels que: p=1&p=2&p=3vous avez deux options:

>>> import urllib
>>> a = (('p',1),('p',2), ('p', 3))
>>> urllib.urlencode(a)
'p=1&p=2&p=3'

ou si vous souhaitez créer une URL avec des paramètres répétitifs:

>>> urllib.urlencode({'p': [1, 2, 3]}, doseq=True)
'p=1&p=2&p=3'

4
si vous souhaitez créer une URL avec des paramètres répétitifs par exemple:? p = 1 & p = 2 & p = 3 alors a = (('p', 1), ('p', 2), ('p', 3)); urllib.urlencode (a) le résultat est 'p = 1 & p = 2 & p = 3'
panchicore

6
Une autre façon d'obtenir des paramètres répétitifs: urllib.urlencode ({'p': [1, 2, 3]}, doseq = True) résultant en 'p = 1 & p = 2 & p = 3'.
mbaechtold

Si vous vous demandez de quoi il doeseqs'agit: "Si des valeurs de la requête arg sont des séquences et que doseq est vraie, chaque élément de séquence est converti en un paramètre distinct."
Martin Thoma le

2

Utilisez la bibliothèque tierce de manipulation d'url Python furl :

f = furl.furl('')
f.args = {'a':'A', 'b':'B'}
print(f.url) # prints ... '?a=A&b=B'

Si vous souhaitez des paramètres répétitifs, vous pouvez effectuer les opérations suivantes:

f = furl.furl('')
f.args = [('a', 'A'), ('b', 'B'),('b', 'B2')]
print(f.url) # prints ... '?a=A&b=B&b=B2'

Où puis-je obtenir un furl? Il ne semble pas être une bibliothèque standard
AMADANON Inc.

1
pip install furlCe ne fait pas partie de la bibliothèque standard
Mayank Jaiswal

-7

Cela me semble un peu plus pythonique et n'utilise aucun autre module:

x = '&'.join(["{}={}".format(k, v) for k, v in {'a':'A', 'b':'B'}.items()])

8
Cela n'encodera pas correctement les paramètres. Cela créera des résultats inattendus si vos données incluent des esperluettes, des égaux, des symboles de hachage, etc.
Jamie Cockburn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.