URL查询字符串中的字段名称有多个值?

cat*_*cat 1 python standards specifications urllib query-string

Python3 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']}
Run Code Online (Sandbox Code Playgroud)

该函数的文档说:

字典键是唯一的查询变量名称,而值是每个名称的值列表。

我可以以某种方式利用此“值列表”功能吗?

无论是维基百科,也不堆栈溢出,也不IETF规范有关“多”或字段的值“列表”提任何东西,我找不到任何这样的语法:

>>> 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']}
Run Code Online (Sandbox Code Playgroud)

似乎没有分隔符会导致键的值包含多个字符串。可能吗?

Dav*_*ida 5

如果存在重复的查询键,您将获得一个长度超过1个元素的列表:

>>> url = p.urlparse("http://exam.ple/path?query=string1&query=string2")
>>> p.parse_qs(url.query)
{'query': ['string1', 'string2']}
Run Code Online (Sandbox Code Playgroud)