2024-04-19 15:55:08 发布
网友
如何将处理urllib.urlencode后的数据转换为dict? urllib.urldecode不存在
urllib.urlencode
urllib.urldecode
正如{a1}对于{}来说
The urlparse module provides the functions parse_qs() and parse_qsl() which are used to parse query strings into Python data structures.
(在较旧的Python版本中,它们位于cgi模块中)。例如:
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之间的明显区别在于后者(在本例中为单个项)将列为值,这是因为查询字符串中没有唯一性保证,对于你的应用程序来说,了解每个键的多个值可能很重要(也就是说,列表并不总是单个项;-)
d
d1
作为替代方案:
>>> sq = urlparse.parse_qsl(s) >>> sq [('a', 'b'), ('c', 'd')] >>> dict(sq) {'a': 'b', 'c': 'd'}
您可以获得一个对序列(urlencode也接受这样一个参数,在本例中它保留顺序,而在dict例中没有要保留的顺序;-)。如果您知道没有重复的“键”,或者不关心是否有重复的“键”,那么(如我所示),您可以调用dict来获取具有非列表值的字典。然而,一般来说,如果复制<是现在(Python不为你自己决定),你需要考虑你想做什么。p>
dict
^{}做你想做的事。它用它们的等效单字符替换%xx转义,并用空格替换加号
例如:
unquote_plus('/%7Ecandidates/?name=john+connolly')
屈服
'/~candidates/?name=john connolly'.
Python 3 code对于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 = 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'
正如{a1}对于{}来说
(在较旧的Python版本中,它们位于
cgi
模块中)。例如:原始字典
d
和“往返”字典d1
之间的明显区别在于后者(在本例中为单个项)将列为值,这是因为查询字符串中没有唯一性保证,对于你的应用程序来说,了解每个键的多个值可能很重要(也就是说,列表并不总是单个项;-)作为替代方案:
您可以获得一个对序列(urlencode也接受这样一个参数,在本例中它保留顺序,而在dict例中没有要保留的顺序;-)。如果您知道没有重复的“键”,或者不关心是否有重复的“键”,那么(如我所示),您可以调用现在(Python不为你自己决定),你需要考虑你想做什么。p>
dict
来获取具有非列表值的字典。然而,一般来说,如果复制<是^{} 做你想做的事。它用它们的等效单字符替换%xx转义,并用空格替换加号
例如:
屈服
Python 3 code对于Alex的解决方案:
备选方案:
parse_qsl是可逆的:
相关问题 更多 >
编程相关推荐