Ken*_*ker 8 python list-comprehension
我有一个从某处解析的字符串列表,格式如下:
[key1, value1, key2, value2, key3, value3, ...]
Run Code Online (Sandbox Code Playgroud)
我想基于这个列表创建一个字典,如下所示:
{key1:value1, key2:value2, key3:value3, ...}
Run Code Online (Sandbox Code Playgroud)
for
具有索引偏移的普通循环可能会成功,但我想知道是否有Pythonic方法可以做到这一点.列表理解似乎很有趣,但我似乎无法找到如何将它们应用于这个特定问题.
有任何想法吗?
pav*_*kha 13
你可以试试:
dict(zip(l[::2], l[1::2]))
Run Code Online (Sandbox Code Playgroud)
说明:我们将列表拆分为两个列表,一个是偶数,一个是奇数元素,从第一个或第二个元素(即l[::2]
和l[1::2]
)开始,从两个步骤中取出它们.然后我们zip
将两个列表中的内置函数用于一个对列表.最后,我们调用dict
从这些键值对创建字典.
这是~4n
时间和~4n
空间,包括最后的字典.它可能比一个循环更快,不过,自从zip
,dict
和切片运营商都写在C.
显示我最喜欢的python成语的好机会:
>>> S = [1,2,3,4,5,6]
>>> dict(zip(*[iter(S)]*2))
{1: 2, 3: 4, 5: 6}
Run Code Online (Sandbox Code Playgroud)
这个棘手的行传递两个参数,zip()
其中每个参数与 S上的迭代器相同,zip()
创建了2项元组,每次都从zip上拉过迭代器.dict()
然后将这些元组转换为字典.
推断:
S = [1,2,3,4,5,6]
I = iter(S)
dict(zip(I,I))
Run Code Online (Sandbox Code Playgroud)