好的,所以根据http://docs.python.org/library/urllib.html
"编码字符串中的参数顺序将与序列中参数元组的顺序相匹配."
除非我尝试运行此代码:
import urllib
values ={'one':'one',
'two':'two',
'three':'three',
'four':'four',
'five':'five',
'six':'six',
'seven':'seven'}
data=urllib.urlencode(values)
print data
Run Code Online (Sandbox Code Playgroud)
输出为......
seven=seven&six=six&three=three&two=two&four=four&five=five&one=one
Run Code Online (Sandbox Code Playgroud)
7,6,3,2,4,5,1?
这看起来不像我的元组的顺序.
Don*_*ner 23
由于它们的实现方式,字典本质上是无序的.如果您希望对它们进行排序,则应使用元组列表(或列表元组,或元组元组或列表列表......):
values = [ ('one', 'one'), ('two', 'two') ... ]
Run Code Online (Sandbox Code Playgroud)
为了防止有人像我一样到达这里寻找获得确定性结果的方法,urlencode按字母顺序对值进行编码,你可以这样做:
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(sorted_values)
print(data)
#> 'five=five&four=four&one=one&seven=seven&six=six&three=three&two=two'
Run Code Online (Sandbox Code Playgroud)