Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将字典确定地编码为url参数列表_Python_Url_Dictionary - Fatal编程技术网

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

在Python中将字典确定地编码为url参数列表,python,url,dictionary,Python,Url,Dictionary,我正在使用生成url的参数字符串。函数的输入是一个字典。在字典上调用urlencode的问题在于输出不是确定性的。也就是说,结果字符串中参数的顺序不一致。urlencode的不确定性行为使得很难测试使用它的代码片段。是否存在urlencode的确定性等价物 我当前的解决方案是将字典转换为元组列表,对其进行排序,然后迭代排序后的列表并生成字符串。我在问这样一个函数是否已经存在。不仅接受映射(字典),还接受两个元素元组的序列: >>> import urllib.parse >

我正在使用生成url的参数字符串。函数的输入是一个字典。在字典上调用
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,字典是一个无序集合。如果您需要有序映射,请改用。