2010-07-27 29 views
5

được, do đó, theo http://docs.python.org/library/urllib.htmlnhầm lẫn thứ tự mã hóa trăn python

"Thứ tự tham số trong chuỗi được mã hóa sẽ khớp với thứ tự tham số tuples trong chuỗi".

trừ khi tôi cố gắng chạy mã này:

import urllib 
values ={'one':'one', 
     'two':'two', 
     'three':'three', 
     'four':'four', 
     'five':'five', 
     'six':'six', 
     'seven':'seven'} 
data=urllib.urlencode(values) 
print data 

kết quả đầu ra như ...

seven=seven&six=six&three=three&two=two&four=four&five=five&one=one 

7,6,3,2,4,5,1?

Điều đó không giống như thứ tự các bộ dữ liệu của tôi.

+1

Bạn không đi qua một chuỗi các bộ dữ liệu. Vì bạn không đi qua một chuỗi các bộ dữ liệu, tại sao bạn trích dẫn tài liệu cho một chuỗi các bộ dữ liệu? –

Trả lời

20

Từ điển vốn không có thứ tự do cách chúng được triển khai. Nếu bạn muốn họ được đặt hàng, bạn nên sử dụng một danh sách các hàng thay vì (hoặc một tuple của danh sách, hoặc một tuple của các bộ, hoặc một danh sách liệt kê ...):

values = [ ('one', 'one'), ('two', 'two') ... ] 
+0

Ồ, tôi hiểu rồi. Tôi hiểu. Lỗi của tôi. –

+3

@Neil: nếu đây là câu trả lời đúng, hãy chấp nhận câu trả lời bằng cách nhấp vào dấu kiểm. –

5

Chỉ trong trường hợp ai đó đến đây giống như tôi tìm kiếm một cách để có được kết quả xác định từ urlencode, để mã hóa các giá trị theo thứ tự abc bạn có thể làm như sau:

from urllib.parse import urlencode 
values ={'one':'one', 
     'two':'two', 
     'three':'three', 
     'four':'four', 
     'five':'five', 
     'six':'six', 
     'seven':'seven'} 
sorted_values = sorted(values.items(), key=lambda val: val[0]) 
data=urlencode(values) 
print(data) 
#> 'five=five&four=four&one=one&seven=seven&six=six&three=three&two=two'