怎么分两次?

时间:2013-12-11 18:59:26

标签: python python-2.7

我有一个带有一些数据的长字符串...我需要按&将其拆分,然后按=拆分它,并从最后一次拆分中创建像key: value一样的对...有可能没有大循环吗?类似的东西:

video_data = video_data.split('&')
video_data = {key:value for value.split('=') in video_data.iteritems()}

2 个答案:

答案 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'}