2009-08-05 8 views
85

J'essaie de convertir un dictionnaire Python en une chaîne pour l'utiliser comme paramètres d'URL. Je suis sûr qu'il y a une meilleure façon de le faire. Qu'Est-ce que c'est?Dictionnaire Python aux paramètres d'URL

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

+1 pour le mot Pythonic. Devrait donner un -1 correspondant à l'imprécision de ce mot. – TMB

Répondre

172

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

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

Si vous souhaitez effectuer une URL avec params répétitives telles que: p=1&p=2&p=3 vous avez deux options:

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

ou si vous voulez faire une url avec params répétitifs:

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

Référence: http://docs.python.org/library/urllib.html#urllib.urlencode –

+4

si vous voulez créer un 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

+5

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

1

Utilisez la 3ème partie bibliothèque 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 voulez 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' 
+0

Où puis-je obtenir furl? Il semble que ce ne soit pas une bibliothèque standard –

+1

'pip install furl' Ce n'est pas une partie de la bibliothèque standard –

-6

Cela semble un peu plus Pythonic pour moi, et ne pas utiliser d'autres modules:

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

Cela ne permettra pas de coder 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. –

Questions connexes