寻找一种Python速记方法,将url编码的字符串解析为元组

2024-05-20 20:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串rssi=199&phase=-1&doppler=-1,我试图用Python解析它,使其看起来像[('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]

目前,我有一个工作功能,做我想要的。它是这样的:

s = 'rssi=199&phase=-1doppler=-1'
spl = s.split('&') # now looks like ['rssi=199', 'phase=-1', 'doppler=-1']
l = []
for i in spl:
    l.append(tuple(i.split('=')))
print l # finally have [('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]

我正在寻找一种较短的方法来完成这项任务在较少的线路。只是为了了解如何清理代码并获得最佳实践。我在python中看到过类似于[ x.strip() for x in foo.split(";") if x.strip() ]的操作,在数组中有for循环。我不完全明白那是什么,也不知道它叫什么。任何方向正确的帮助都将不胜感激


Tags: 字符串in功能forsplnowlikesplit
3条回答

我假设您从一个URL开始,在?上拆分并删除了主机和路径,现在正在尝试解析查询字符串。您可能希望从一开始就使用urlparse

import urlparse

parsed = urlparse.urlparse('http://www.bob.com/index?rssi=199&phase=-1&doppler=-1')
print parsed.hostname + parsed.path 
# www.bob.com/index

query_tuples = urlparse.parse_qsl(parsed.query)
print query_tuples 
# [('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]

您所询问的结构称为list comprehension。您可以将for循环替换为:

[v.split('=') for v in s.split('&')]

这会给你一个列表,比如:

[['rssi', '199'], ['phase', '-1'], ['doppler', '-1']]

但是对于您正在做的事情,urlparse.parse_qs方法可能更简单:

>>> import urlparse
>>> urlparse.parse_qs('rssi=199&phase=-1&doppler=-1')
{'phase': ['-1'], 'rssi': ['199'], 'doppler': ['-1']}

…或者urlparse.parse_qsl,如果您真的想要列表/元组而不是dict:

>>> urlparse.parse_qsl('rssi=199&phase=-1&doppler=-1')
[('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]

你在找^{}

>>> import urlparse
>>> urlparse.parse_qsl("foo=bar&bar=baz")
[('foo', 'bar'), ('bar', 'baz')]

把它变成一本字典也可能有帮助:

>>> dict(urlparse.parse_qsl("foo=bar&bar=baz"))
{'foo': 'bar', 'bar': 'baz'}

相关问题 更多 >