python 中从 urlparse 返回的拆分列表

Split list returned from urlparse in python

我能够使用 urlsplit 解析 url 并使用 query 参数获取参数。

url'/api/v1/test?par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar'

使用url拆分和查询后我得到

'par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar'

在上面的 运行 parse_qs 之后我得到

{'par2': ['val2a=1&val2b=foo&val2c=bar'], 'par1': ['val1']}

这是我需要的输出

'par1': ['val1']

我得到 return 作为具有如下解码数据的参数之一的列表

'par2': ['val2a=1&val2b=foo&val2c=bar]

我可以在 &= 使用 split 方法拆分 par2 并得到 val2a...

但是有没有更好的方法呢?

您可以再次对 par2

的值使用 parse_qs
>>> url = '/api/v1/test?par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar'
>>> q = parse_qs(urlparse(url).query)
>>> q
{'par2': ['val2a=1&val2b=foo&val2c=bar'], 'par1': ['val1']}
>>> parse_qs(q['par2'][0])
{'val2b': ['foo'], 'val2c': ['bar'], 'val2a': ['1']}

在最后一个结果后你可以得到val2a等的值

split &partition = 可能是最简单和最有效的方法。

result = {k: v for k, _, v in (pair.partition('=') for pair in values.split('&'))}
# or
result = dict(pair.split('=') for pair in values.split('&'))

使用 re.sub() 是另一种选择,但我认为它过于复杂了。