我使用urllib.parse.urlencode生成网址的参数字符串。函数的输入是字典。在字典上调用urlencode
的问题是输出不是确定性的。即,结果字符串中参数的顺序不一致。 urlencode
的不确定行为使得很难测试使用它的代码片段。是否存在确定性等价的urlencode
?
我目前的解决方案是将字典转换为元组列表,对其进行排序,然后迭代排序列表并生成字符串。我问这样的功能是否已经存在。
答案 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。