使用urllib进行编码时,保持url参数的顺序

use*_*629 2 python dictionary get urllib

我试图用python模拟一个get请求.我有一个参数字典,我正在使用urllib.urlencode对它们进行urlencode

我注意到虽然字典的形式如下:

{ "k1":"v1", "k2":"v2", "k3":"v3", .. }
Run Code Online (Sandbox Code Playgroud)

在urlencoding后,参数的顺序切换为:

/?k1=v1&k3=v3%k2=v2...
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我可以强制字典中的顺序保持不变吗?

Die*_*rro 6

正如您在注释中看到的那样,Python字典不是有序的,但是OrderedDictPython中有一个可用于实现所需结果的字典:

from collections import OrderedDict
import urllib
urllib.urlencode(OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]))
# Out: 'k1=v1&k2=v2&k3=v3'
Run Code Online (Sandbox Code Playgroud)

有关OrderedDIct的更多信息