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()
是另一种选择,但我认为它过于复杂了。
我能够使用 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()
是另一种选择,但我认为它过于复杂了。