假设我在 Python 中有一个列表 a
,其条目可以方便地映射到字典。每个偶数元素代表字典的键,后面的奇数元素是值
例如,
a = ['hello','world','1','2']
我想把它转换成字典b
,其中
b['hello'] = 'world'
b['1'] = '2'
在语法上最简洁的方法是什么?
最佳答案
b = dict(zip(a[::2], a[1::2]))
如果 a
很大,您可能需要执行以下操作,它不会像上面那样创建任何临时列表。
from itertools import izip
i = iter(a)
b = dict(izip(i, i))
在 Python 3 中,您也可以使用 dict 理解,但具有讽刺意味的是,我认为最简单的方法是使用 range()
和 len()
,这通常是代码异味。
b = {a[i]: a[i+1] for i in range(0, len(a), 2)}
所以 iter()/izip()
方法可能仍然是 Python 3 中最 Pythonic 的方法,尽管正如 EOL 在评论中指出的那样,zip()
已经是在 Python 3 中懒惰,所以你不需要 izip()
.
i = iter(a)
b = dict(zip(i, i))
在 Python 3.8 及更高版本中,您可以使用“海象”运算符 (:=
) 在一行上编写:
b = dict(zip(i := iter(a), i))
否则,您需要使用分号将其放在一行中。
https://stackoverflow.com/questions/4576115/