2009-08-05 38 views
85

Estoy tratando de convertir un diccionario de Python en una cadena para usar como parámetros de URL. Estoy seguro de que hay una mejor forma de hacer esto, más Pythonic. ¿Qué es?Diccionario de Python a Parámetros de URL

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

+1 para la palabra Pythonic. Debería dar un -1 correspondiente a la vaguedad de esa palabra. – TMB

Respuesta

172

Use urllib.urlencode(). Toma un diccionario de pares clave-valor y lo convierte en una forma adecuada para una URL (por ejemplo, key1=val1&key2=val2).

Si está utilizando python3, utilice urllib.parse.urlencode()

Si desea realizar una URL con params repetitivas tales como: p=1&p=2&p=3 tiene dos opciones:

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

o si desea hacer una url con params repetitivas:

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

Referencia: http://docs.python.org/library/urllib.html#urllib.urlencode –

+4

si desea crear una url con parámetros repetitivos, por ejemplo:? P = 1 & p = 2 & p = 3 luego a = ((' p ', 1), (' p ', 2), (' p ', 3)); urllib.urlencode (a) el resultado es 'p = 1 & p = 2 & p = 3' – panchicore

+5

Otra forma de obtener parámetros repetitivos: urllib.urlencode ({'p': [1, 2, 3]}, doseq = True) dando como resultado 'p = 1 & p = 2 & p = 3'. – mbaechtold

1

Use la tercera biblioteca de manipulación de URL Python partido furl:

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

Si quieres parámetros repetitivos, puede hacer lo siguiente:

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

¿Dónde obtengo furl? Parece que no es una biblioteca estándar –

+1

'pip install furl' No es parte de la biblioteca estándar –

-6

Esto parece un poco más Pythonic a mí, y no utiliza ningún otro módulo:

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

Esto no codificará por ciento los parámetros correctamente. Esto creará resultados inesperados si sus datos incluyen signos de unión, iguales, símbolos hash, etc. –

Cuestiones relacionadas