Słownik Pythona do parametrów adresu URL


124

Próbuję przekonwertować słownik języka Python na ciąg znaków do użycia jako parametry adresu URL. Jestem pewien, że istnieje lepszy, bardziej Pythonowy sposób na zrobienie tego. Co to jest?

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

Odpowiedzi:


252

Użyj urllib.urlencode(). Pobiera słownik par klucz-wartość i konwertuje go na postać odpowiednią dla adresu URL (np key1=val1&key2=val2.).

Jeśli używasz Python3, użyj urllib.parse.urlencode()

Jeśli chcesz utworzyć adres URL z powtarzającymi się parametrami, takimi jak: p=1&p=2&p=3masz dwie opcje:

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

lub jeśli chcesz utworzyć adres URL z powtarzającymi się parametrami:

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

4
jeśli chcesz utworzyć adres URL z powtarzającymi się parametrami, na przykład:? p = 1 & p = 2 & p = 3 then a = (('p', 1), ('p', 2), ('p', 3)); urllib.urlencode (a) wynik to 'p = 1 & p = 2 & p = 3'
panchicore

6
Inny sposób na uzyskanie powtarzalnych parametrów: urllib.urlencode ({'p': [1, 2, 3]}, dawkaq = True), co daje w wyniku 'p = 1 & p = 2 & p = 3'.
mbaechtold

Jeśli zastanawiasz się, o co doeseqchodzi: „Jeśli jakiekolwiek wartości w zapytaniu arg są sekwencjami, a dawkaq ma wartość true, każdy element sekwencji jest konwertowany na oddzielny parametr”.
Martin Thoma,

2

Użyj biblioteki do manipulacji adresami URL w języku Python innej firmy :

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

Jeśli potrzebujesz powtarzalnych parametrów, możesz wykonać następujące czynności:

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

Gdzie dostanę furl? Wydaje się, że nie jest to standardowa biblioteka
AMADANON Inc.

1
pip install furlTo nie jest część standardowej biblioteki
Mayank Jaiswal

-7

Wydaje mi się to trochę bardziej Pythonic i nie używa żadnych innych modułów:

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

8
To nie będzie procent poprawnie zakodować parametrów. Spowoduje to nieoczekiwane rezultaty, jeśli Twoje dane zawierają znaki handlowe, znaki równości, krzyżyki itp.
Jamie Cockburn
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.