Python3' s urllib.parse.parse_qs
奇怪地为查询字符串返回string, list<string>
字典:
>>> import urllib.parse as p
>>> url = p.urlparse("http://exam.ple/path?query=string&yes=no")
ParseResult(scheme='http', netloc='exam.ple', path='/path', params='', query='query=string&yes=no', fragment='')
>>> p.parse_qs(url.query)
{'query': ['string'], 'yes': ['no']}
该函数documentation表示:
字典键是唯一的查询变量名称,值是每个名称的值列表。
我可以利用这个&#34;值列表&#34;能力莫名其妙?
Wikipedia,Stack Overflow和the IETF specification都没有提及&#34;多个&#34;或&#34;列出&#34;字段的值,我找不到任何这样的语法:
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string&yes=no/a=0").query)
{'query': ['string'], 'yes': ['no/a=0']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string@yes=no").query)
{'query': ['string@yes=no']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string;yes=no").query)
{'query': ['string'], 'yes': ['no']}
>>> p.parse_qs(p.urlparse("http://exam.ple/path?query=string,yes=no").query)
{'query': ['string,yes=no']}
没有分隔符可能会导致键值包含多个字符串。有可能吗?
答案 0 :(得分:5)
如果有重复的查询键,您将获得长于1个元素的列表:
>>> url = p.urlparse("http://exam.ple/path?query=string1&query=string2")
>>> p.parse_qs(url.query)
{'query': ['string1', 'string2']}