Dal dizionario Python ai parametri URL


124

Sto cercando di convertire un dizionario Python in una stringa da utilizzare come parametri URL. Sono sicuro che ci sia un modo migliore e più pitonico per farlo. Che cos'è?

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

Risposte:


252

Usa urllib.urlencode(). Prende un dizionario di coppie chiave-valore e lo converte in una forma adatta a un URL (ad esempio key1=val1&key2=val2).

Se stai usando Python3, usa urllib.parse.urlencode()

Se vuoi creare un URL con parametri ripetitivi come: p=1&p=2&p=3hai due opzioni:

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

o se vuoi creare un URL con parametri ripetitivi:

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

4
se vuoi creare un URL con parametri ripetitivi, ad esempio:? p = 1 & p = 2 & p = 3 allora a = (('p', 1), ('p', 2), ('p', 3)); urllib.urlencode (a) il risultato è 'p = 1 & p = 2 & p = 3'
panchicore

6
Un altro modo per ottenere parametri ripetitivi: urllib.urlencode ({'p': [1, 2, 3]}, doseq = True) risultante in 'p = 1 & p = 2 & p = 3'.
mbaechtold

Se ti chiedi di cosa doeseqsi tratta: "Se alcuni valori nella query arg sono sequenze e doseq è vero, ogni elemento della sequenza viene convertito in un parametro separato."
Martin Thoma

2

Usa la libreria di manipolazione URL Python di terze parti furl :

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

Se vuoi parametri ripetitivi, puoi fare quanto segue:

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

Dove trovo Furl? Sembra non essere una libreria standard
AMADANON Inc.

1
pip install furlNon fa parte della libreria standard
Mayank Jaiswal

-7

Questo mi sembra un po 'più Pythonic e non usa altri moduli:

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

8
Ciò non codificherà in percentuale i parametri correttamente. Ciò creerà risultati inaspettati se i tuoi dati includono e commerciali, uguali, simboli hash, ecc.
Jamie Cockburn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.