[英]Looking for a Python shorthand way of parsing a url encoded string into tuples
我有一个字符串rssi=199&phase=-1&doppler=-1
,我试图将其解析为[('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]
使用Python。
目前,我有一个可以执行我想要的功能的工作。 它是这样的:
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循环。 我不完全了解它做什么,也不知道它叫什么。 任何在正确方向上的帮助将不胜感激。
您要询问的结构称为列表理解 。 您可以将for
循环替换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
,如果您确实想要列表/元组而不是字典:
>>> urlparse.parse_qsl('rssi=199&phase=-1&doppler=-1')
[('rssi', '199'), ('phase', '-1'), ('doppler', '-1')]
您正在寻找urlparse.parse_qsl
:
>>> 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'}
我假设您以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')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.