在Python中将字典确定地编码为url参数列表
我正在使用生成url的参数字符串。函数的输入是一个字典。在字典上调用在Python中将字典确定地编码为url参数列表,python,url,dictionary,Python,Url,Dictionary,我正在使用生成url的参数字符串。函数的输入是一个字典。在字典上调用urlencode的问题在于输出不是确定性的。也就是说,结果字符串中参数的顺序不一致。urlencode的不确定性行为使得很难测试使用它的代码片段。是否存在urlencode的确定性等价物 我当前的解决方案是将字典转换为元组列表,对其进行排序,然后迭代排序后的列表并生成字符串。我在问这样一个函数是否已经存在。不仅接受映射(字典),还接受两个元素元组的序列: >>> import urllib.parse >
urlencode
的问题在于输出不是确定性的。也就是说,结果字符串中参数的顺序不一致。urlencode
的不确定性行为使得很难测试使用它的代码片段。是否存在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'
如果您只需要一个有序映射,请改用。如果您必须使用DICT,则可以在将其传递到
urlencode
之前将其转换为OrderedDict
:
d={'a':1,'b':2}
urlencode(OrderedDict(已排序(d.items()))
这将把dict转换为falsetru提到的有序二元元组。谢谢,但可能我不清楚我必须使用字典这一事实。因此,您建议的解决方案与我在问题中提出的解决方案相同(将字典转换为元组的排序列表,然后对列表进行编码)。@snakile,字典是一个无序集合。如果您需要有序映射,请改用。