确定性地将字典编码为Python中的url参数列表

时间:2014-05-25 12:14:28

标签: python url dictionary

我使用urllib.parse.urlencode生成网址的参数字符串。函数的输入是字典。在字典上调用urlencode的问题是输出不是确定性的。即,结果字符串中参数的顺序不一致。 urlencode的不确定行为使得很难测试使用它的代码片段。是否存在确定性等价的urlencode

我目前的解决方案是将字典转换为元组列表,对其进行排序,然后迭代排序列表并生成字符串。我问这样的功能是否已经存在。

2 个答案:

答案 0 :(得分:1)

urllib.parse.urlencode不仅接受映射(字典),还接受一个双元素元组的序列:

>>> import urllib.parse
>>> urllib.parse.urlencode([('a', 'b'), ('c', 'd')])
'a=b&c=d'
>>> urllib.parse.urlencode([('c', 'd'), ('a', 'b')])
'c=d&a=b'

如果您只需要有序映射,请改用collections.OrderedDict

答案 1 :(得分:0)

如果您必须使用dicts,则可以在将它们传递给OrderedDict之前将其转换为urlencode

d = {'a': 1, 'b': 2}
urlencode(OrderedDict(sorted(d.items())))

这会将dict转换为有序的双元素元组falsetructions。