Kamus Python ke Parameter URL


124

Saya mencoba untuk mengubah kamus Python menjadi string untuk digunakan sebagai parameter URL. Saya yakin ada cara yang lebih baik dan lebih Pythonic untuk melakukan ini. Apa itu?

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

Jawaban:


252

Gunakan urllib.urlencode(). Ini mengambil kamus pasangan nilai-kunci, dan mengubahnya menjadi bentuk yang sesuai untuk URL (misalnya, key1=val1&key2=val2).

Jika Anda menggunakan Python3, gunakan urllib.parse.urlencode()

Jika Anda ingin membuat URL dengan parameter berulang seperti: p=1&p=2&p=3Anda memiliki dua opsi:

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

atau jika Anda ingin membuat url dengan parameter berulang:

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

4
jika Anda ingin membuat url dengan parameter berulang misalnya:? p = 1 & p = 2 & p = 3 lalu a = (('p', 1), ('p', 2), ('p', 3)); urllib.urlencode (a) hasilnya adalah 'p = 1 & p = 2 & p = 3'
panchicore

6
Cara lain untuk mendapatkan parameter berulang: urllib.urlencode ({'p': [1, 2, 3]}, doseq = True) menghasilkan 'p = 1 & p = 2 & p = 3'.
mbaechtold

Jika Anda bertanya-tanya tentang apa doeseqini: "Jika ada nilai dalam argumen kueri adalah urutan dan dosisq benar, setiap elemen urutan diubah ke parameter terpisah."
Martin Thoma

2

Gunakan furl pustaka manipulasi url Python pihak ketiga :

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

Jika Anda menginginkan parameter berulang, Anda dapat melakukan hal berikut:

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

Dimana saya bisa mendapatkan furl? Tampaknya bukan perpustakaan standar
AMADANON Inc.

1
pip install furlIni bukan bagian dari perpustakaan standar
Mayank Jaiswal

-7

Ini tampaknya sedikit lebih Pythonic bagi saya, dan tidak menggunakan modul lain:

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

8
Ini tidak akan persen mengkodekan parameter dengan benar. Ini akan membuat hasil yang tidak terduga jika data Anda menyertakan ampersand, sama dengan, simbol hash, dll.
Jamie Cockburn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.