1

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

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

使用 urlsplit 和查询后,我得到

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

在上面运行 parse_qs 之后,我得到了

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

这是我需要的输出

'par1': ['val1']

我将返回作为具有以下解码数据的参数之一的列表

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

我可以par2使用andsplit的方法进行拆分&=获取val2a...

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

4

2 回答 2

2

您可以再次parse_qs使用par2

>>> 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']}

在最后一个结果之后,您可以获得val2aetc的值。

于 2016-04-29T18:03:53.033 回答
1

spliton &and partitionon=可能是最简单和最有效的方法。

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()是另一种选择,但我相信它只是过于复杂了。

于 2016-04-29T18:11:27.107 回答