Python Dictionary a los parámetros de URL


124

Estoy tratando de convertir un diccionario de Python en una cadena para usar como parámetros de URL. Estoy seguro de que hay una manera mejor y más pitónica de hacerlo. ¿Qué es?

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

Respuestas:


252

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

Si está utilizando Python3, use urllib.parse.urlencode()

Si desea crear una URL con parámetros repetitivos como: p=1&p=2&p=3tiene dos opciones:

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

o si quieres hacer una url con parámetros repetitivos:

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

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

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

Si se pregunta de qué doeseqse trata: "Si alguno de los valores en la consulta arg son secuencias y doseq es verdadero, cada elemento de secuencia se convierte en un parámetro separado".
Martin Thoma

2

Utilice la biblioteca de manipulación de URL de Python de terceros furl :

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

Si desea 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'

¿Dónde consigo furl? Parece que no es una biblioteca estándar
AMADANON Inc.

1
pip install furlNo es parte de la biblioteca estándar
Mayank Jaiswal

-7

Esto me parece un poco más Pythonic, y no usa ningún otro módulo:

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

8
Esto no codificará por ciento los parámetros correctamente. Esto creará resultados inesperados si sus datos incluyen símbolos de unión, iguales, símbolos de patata, etc.
Jamie Cockburn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.