由于该文档的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'}
您可以获得一对对的序列(urlencode也接受此类参数- 在这种情况下,它保留顺序,而在dict情况下,则不保留顺序;-)。如果您知道没有重复的“键”,或者不在乎是否存在,那么(如我所示),您可以调用dict
以获取具有非列表值的字典。但一般情况下,你需要考虑你想要做什么,如果重复的 存在(Python没有决定代表你;-)。