【问题标题】:Keeping url parameters in order when encoding with urllib使用 urllib 编码时保持 url 参数的顺序
【发布时间】:2014-08-03 18:15:27
【问题描述】:

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

我注意到虽然字典是这样的:

{ "k1":"v1", "k2":"v2", "k3":"v3", .. }

在urlencoding时,参数的顺序被切换到:

/?k1=v1&k3=v3%k2=v2...

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

【问题讨论】:

  • 所有参数都作为GET 参数传递,在key 和它的value 互换之前,顺序无关紧要。
  • 这种行为源于字典是一个哈希表这一事实。然后键没有排序。见stackoverflow.com/questions/4458169/…

标签: python dictionary get urllib


【解决方案1】:

正如您在 cmets 中看到的,Python 字典没有排序,但 Python 中有一个 OrderedDict,您可以使用它来实现您想要的结果:

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

更多关于OrderedDIct的信息

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2020-03-22
    • 2013-01-13
    • 2019-11-25
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多