Python,相反的函数urllib.urlencode

Python,相反的函数urllib.urlencode,python,urllib,Python,Urllib,如何将处理urllib.urlencode后的数据转换为dict? urllib.urldecode不存在。至于urlencode urlparse模块提供 函数parse_qs()和parse_qsl() 用于解析查询字符串的 转换为Python数据结构 (在较旧的Python版本中,它们位于cgi模块中)。例如: >>> import urllib >>> import urlparse >>> d = {'a':'b', 'c':'d'

如何将处理
urllib.urlencode
后的数据转换为dict?
urllib.urldecode
不存在。

至于
urlencode

urlparse模块提供 函数parse_qs()和parse_qsl() 用于解析查询字符串的 转换为Python数据结构

(在较旧的Python版本中,它们位于
cgi
模块中)。例如:

>>> import urllib
>>> import urlparse
>>> d = {'a':'b', 'c':'d'}
>>> s = urllib.urlencode(d)
>>> s
'a=b&c=d'
>>> d1 = urlparse.parse_qs(s)
>>> d1
{'a': ['b'], 'c': ['d']}
原始字典
d
和“往返”字典
d1
之间的明显区别在于后者(在本例中为单个项)将列表作为值--这是因为查询字符串中没有唯一性保证,对于你的应用程序来说,了解每个键的多个值可能很重要(也就是说,列表并不总是单个项;-)

作为替代方案:

>>> sq = urlparse.parse_qsl(s)
>>> sq  
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
您可以获得一个对序列(urlencode也接受这样一个参数——在本例中它保留顺序,而在dict例中没有要保留的顺序;-)。如果您知道没有重复的“键”,或者不关心是否有重复的“键”,那么(如我所示),您可以调用
dict
,以获取具有非列表值的词典。然而,一般来说,如果存在重复(Python并不代表您的决定,那么),您需要考虑您想做什么。< < /P> < P> > <代码> URLCONDUMEN/COD> >,

urlparse模块提供 函数parse_qs()和parse_qsl() 用于解析查询字符串的 转换为Python数据结构

(在较旧的Python版本中,它们位于
cgi
模块中)。例如:

>>> import urllib
>>> import urlparse
>>> d = {'a':'b', 'c':'d'}
>>> s = urllib.urlencode(d)
>>> s
'a=b&c=d'
>>> d1 = urlparse.parse_qs(s)
>>> d1
{'a': ['b'], 'c': ['d']}
原始字典
d
和“往返”字典
d1
之间的明显区别在于后者(在本例中为单个项)将列表作为值--这是因为查询字符串中没有唯一性保证,对于你的应用程序来说,了解每个键的多个值可能很重要(也就是说,列表并不总是单个项;-)

作为替代方案:

>>> sq = urlparse.parse_qsl(s)
>>> sq  
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
您可以获得一个对序列(urlencode也接受这样一个参数——在本例中它保留顺序,而在dict例中没有要保留的顺序;-)。如果您知道没有重复的“键”,或者不关心是否有重复的“键”,那么(如我所示),您可以调用
dict
,以获取具有非列表值的词典。然而,一般来说,如果存在重复(Python并不代表您的决定,那么),您需要考虑您想要做什么。亚历克斯的解决方案

< P>:< /P>
>>> import urllib.parse
>>> d = {'a':'b', 'c':'d'}
>>> s = urllib.parse.urlencode(d)
>>> s
'a=b&c=d'
>>> d1 = urllib.parse.parse_qs(s)
>>> d1
{'a': ['b'], 'c': ['d']}
备选方案:

>>> sq = urlparse.parse_qsl(s)
>>> sq  
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
parse_qsl是可逆的:

>>> urllib.parse.urlencode(sq)
'a=b&c=d'
对于Alex的解决方案:

>>> import urllib.parse
>>> d = {'a':'b', 'c':'d'}
>>> s = urllib.parse.urlencode(d)
>>> s
'a=b&c=d'
>>> d1 = urllib.parse.parse_qs(s)
>>> d1
{'a': ['b'], 'c': ['d']}
备选方案:

>>> sq = urlparse.parse_qsl(s)
>>> sq  
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
parse_qsl是可逆的:

>>> urllib.parse.urlencode(sq)
'a=b&c=d'
做你想做的事。它用它们的等效单字符替换%xx转义,并用空格替换加号

例如:

unquote_plus('/%7Ecandidates/?name=john+connolly') 
屈服

'/~candidates/?name=john connolly'.
做你想做的事。它用它们的等效单字符替换%xx转义,并用空格替换加号

例如:

unquote_plus('/%7Ecandidates/?name=john+connolly') 
屈服

'/~candidates/?name=john connolly'.

非常彻底的回答。令人惊叹的!向上投票支持Python 2,但是Python 3都在
urllib
模块中。见“恐惧症答案”,答案非常彻底。令人惊叹的!向上投票支持Python 2,但是Python 3都在
urllib
模块中。请看“恐惧症答案”。他说,他想要一个口授。所以你的答案是错误的。耶,这就是我要找的。他说,他想要一个口授。所以你的答案是错误的。耶,这就是我要找的。