我有一个带有一些数据的长字符串...我需要按&
将其拆分,然后按=
拆分它,并从最后一次拆分中创建像key: value
一样的对...有可能没有大循环吗?类似的东西:
video_data = video_data.split('&')
video_data = {key:value for value.split('=') in video_data.iteritems()}
答案 0 :(得分:6)
看起来您正在尝试解析查询字符串。 Python已经有了一个方法,它还将处理键的多个值,并为您自动创建key->值列表的字典:
from urlparse import parse_qs
s = 'a=3&b=5&a=4'
qs = parse_qs(s)
# {'a': ['3', '4'], 'b': ['5']}
J.F. Sebastian在评论中指出:
注意:它不只是拆分&和=例如:
parse_qs("a=%21&b=urlencoded")
# {'a': ['!'], 'b': ['urlencoded']}
答案 1 :(得分:2)
urlparse.parse_qs()
或urlparse.parse_qsl()
可以为您完成这项工作,更好,更快,更强大:
>>> example = 'foo=bar&ham=eggs&answer=42'
>>> from urlparse import parse_qs, parse_qsl
>>> parse_qs(example)
{'answer': ['42'], 'foo': ['bar'], 'ham': ['eggs']}
>>> parse_qsl(example)
[('foo', 'bar'), ('ham', 'eggs'), ('answer', '42')]
>>> dict(parse_qsl(example))
{'answer': '42', 'foo': 'bar', 'ham': 'eggs'}
使用其中一个,具体取决于您需要多少支持在查询字符串中多次出现的密钥。
但你真的想用dict理解自己做这个,你需要将.split()
调用嵌入一个元组:
video_data = {key: value for item in video_data.split('&') for key, value in (item.split('='),)}
但是如果没有字典理解,同样的解析会更容易;使用生成器表达式代替为dict()
工厂生成一系列键值对:
video_data = dict(item.split('=') for item in video_data.split('&'))
演示:
>>> example = 'foo=bar&ham=eggs&answer=42'
>>> {key: value for item in example.split('&') for key, value in (item.split('='),)}
{'answer': '42', 'foo': 'bar', 'ham': 'eggs'}
>>> dict(item.split('=') for item in example.split('&'))
{'answer': '42', 'foo': 'bar', 'ham': 'eggs'}