Từ điển Python đến Tham số URL


124

Tôi đang cố gắng chuyển đổi từ điển Python thành một chuỗi để sử dụng làm tham số URL. Tôi chắc chắn rằng có một cách tốt hơn, nhiều hơn Pythonic để làm điều này. Nó là gì?

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

Câu trả lời:


252

Sử dụng urllib.urlencode(). Nó lấy từ điển các cặp khóa-giá trị và chuyển đổi nó thành một dạng phù hợp với URL (ví dụ key1=val1&key2=val2:).

Nếu bạn đang sử dụng Python3, hãy sử dụng urllib.parse.urlencode()

Nếu bạn muốn tạo một URL với các tham số lặp lại như: p=1&p=2&p=3bạn có hai tùy chọn:

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

hoặc nếu bạn muốn tạo url với các tham số lặp lại:

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

4
nếu bạn muốn tạo một url với các tham số lặp lại, ví dụ:? p = 1 & p = 2 & p = 3 then a = (('p', 1), ('p', 2), ('p', 3)); urllib.urlencode (a) kết quả là 'p = 1 & p = 2 & p = 3'
panchicore

6
Một cách khác để lấy các tham số lặp lại: urllib.urlencode ({'p': [1, 2, 3]}, liềuq = True) dẫn đến 'p = 1 & p = 2 & p = 3'.
mbaechtold

Nếu bạn tự hỏi điều gì doeseqvề: "Nếu bất kỳ giá trị nào trong đối số truy vấn là chuỗi và liềuq là đúng, mỗi phần tử trình tự được chuyển đổi thành một tham số riêng biệt."
Martin Thoma

2

Sử dụng thư viện thao tác url Python bên thứ 3 furl :

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

Nếu bạn muốn các thông số lặp lại, bạn có thể làm như sau:

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

Tôi lấy lông ở đâu? Nó không phải dường như là một thư viện chuẩn
AMADANON Inc

1
pip install furlNó không phải là một phần của thư viện chuẩn
Mayank Jaiswal

-7

Điều này có vẻ giống Pythonic hơn một chút đối với tôi và không sử dụng bất kỳ mô-đun nào khác:

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

8
Điều này sẽ không phần trăm mã hóa các thông số đúng cách. Điều này sẽ tạo ra kết quả bất ngờ nếu dữ liệu của bạn bao gồm ampersands, bình đẳng, biểu tượng băm vv
Jamie Cockburn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.