2009-08-05 29 views
85

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

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

+1 cho từ Pythonic. Nên đưa ra -1 tương ứng cho sự mơ hồ của từ đó. – TMB

Trả lời

172

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

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

Nếu bạn muốn thực hiện một URL với params lặp đi lặp lại như: p=1&p=2&p=3 bạn có hai lựa 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 thực hiện một url với params lặp đi lặp lại:

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

Tham khảo: http://docs.python.org/library/urllib.html#urllib.urlencode –

+4

nếu bạn muốn tạo url với thông số lặp lại ví dụ:? P = 1 & p = 2 & p = 3 thì a = ((' p ', 1), (' p ', 2), (' p ', 3)); urllib.urlencode (a) kết quả là 'p = 1 & p = 2 & p = 3' – panchicore

+5

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

1

Sử dụng bên Python thư viện url thao tác 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 đi 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' 
+0

Tôi bị lột da ở đâu? Nó xuất hiện không phải là một thư viện chuẩn –

+1

'pip install furl' Nó không phải là một phần của thư viện chuẩn –

-6

Điều này có vẻ nhiều hơn một chút Pythonic với tôi, và không sử dụng bất kỳ các module khác:

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

Điều này sẽ không mã hóa phần trăm các thông số đúng cách. Điều này sẽ tạo ra kết quả không mong muốn nếu dữ liệu của bạn bao gồm ký hiệu và, bằng, biểu tượng băm, v.v. –

Các vấn đề liên quan