Python Sözlüğü - URL Parametreleri


124

URL parametreleri olarak kullanmak için bir Python sözlüğünü bir dizeye dönüştürmeye çalışıyorum. Bunu yapmanın daha iyi, daha Pythonic bir yolu olduğundan eminim . Bu ne?

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

Yanıtlar:


252

Kullanın urllib.urlencode(). Anahtar-değer çiftlerinden oluşan bir sözlüğü alır ve bunu bir URL için uygun bir biçime dönüştürür (örneğin, key1=val1&key2=val2).

Python3 kullanıyorsanız, şunu kullanın urllib.parse.urlencode()

Aşağıdakiler gibi tekrar eden parametrelere sahip bir URL oluşturmak p=1&p=2&p=3istiyorsanız : iki seçeneğiniz vardır:

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

veya tekrarlayan parametrelere sahip bir url yapmak istiyorsanız:

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

4
Örneğin, tekrarlayan parametrelere sahip bir url yapmak istiyorsanız:? p = 1 & p = 2 & p = 3 sonra a = (('p', 1), ('p', 2), ('p', 3)); urllib.urlencode (a) sonuç 'p = 1 & p = 2 & p = 3'
panchicore

6
Tekrarlayan parametreleri almanın başka bir yolu: urllib.urlencode ({'p': [1, 2, 3]}, dozq = True) 'p = 1 & p = 2 & p = 3' ile sonuçlanır.
mbaech

Neyle doeseqilgili olduğunu merak ediyorsanız : "Sorgu arg'deki herhangi bir değer sıraysa ve dozq doğruysa, her sıra öğesi ayrı bir parametreye dönüştürülür."
Martin Thoma

2

3. parti Python url manipülasyon kitaplığı furl'yi kullanın :

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

Tekrarlayan parametreler istiyorsanız, aşağıdakileri yapabilirsiniz:

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

Kürkü nereden alırım? Standart bir kütüphane değil gibi görünüyor
AMADANON Inc.

1
pip install furlStandart kütüphanenin bir parçası değil
Mayank Jaiswal

-7

Bu bana biraz daha Pythonic gibi görünüyor ve başka herhangi bir modül kullanmıyor:

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

8
Bu, parametreleri yüzde olarak doğru şekilde kodlamaz. Verileriniz "ve" işaretleri, eşitler, hash sembolleri vb. İçeriyorsa, bu beklenmedik sonuçlar doğuracaktır.
Jamie Cockburn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.