假设我a在 Python 中有一个列表,其条目可以方便地映射到字典。每个偶数元素代表字典的键,后面的奇数元素是值
a
例如,
a = ['hello','world','1','2']
我想将其转换为字典b,其中
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()and len(),这通常是代码异味。
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().
iter()/izip()
zip()
izip()
i = iter(a) b = dict(zip(i, i))
在 Python 3.8 及更高版本中,您可以使用“海象”运算符 ( ) 在一行上编写:=:
:=
b = dict(zip(i := iter(a), i))
否则,您需要使用分号将其放在一行中。