python - 将 [key1,val1,key2,val2] 转换为字典?

假设我在 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/

相关文章:

linux - 如何从命令行检查 SMTP 是否正常工作(Linux)

python - 如何卸载使用 pip install --user 安装的软件包

python - 如何在 python 中发送带有请求的 "multipart/form-data"

linux - 如何通过 SSH 在 Windows 中挂载远程 Linux 文件夹?

linux - 使用 sudo 时找不到命令

datetime - 组合 datetime.date 和 datetime.time 对象的 Py

python - 我如何告诉 PyCharm 参数应该是什么类型?

linux - 如何在linux中列出空文件夹

python - Django:为什么有些模型字段会相互冲突?

linux - 如何使用 grep 在当前目录中搜索具有字符串 "hello"但仅显示 .h 和 .