如何用两个列表(键列表和值列表)创建一个 Python 字典?

用 zip() 配合 dict() 即可把键列表和值列表合并成字典:dict(zip(keys, values))。本文介绍基本用法、长度不一致的处理及字典推导式写法。

最佳实践
如何用两个列表(键列表和值列表)创建一个 Python 字典?封面

一行搞定:dict(zip(keys, values))zip() 把两个列表按位置配对成元组流,dict() 再把它变成字典。

基本用法

keys = ['a', 'b', 'c']
values = [1, 2, 3]

dictionary = dict(zip(keys, values))
print(dictionary)  # {'a': 1, 'b': 2, 'c': 3}

长度不一致时

zip() 默认以最短的列表为准,多余部分直接丢弃:

keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3]
dict(zip(keys, values))  # {'a': 1, 'b': 2, 'c': 3},'d' 被忽略

如果希望长度不一致就报错(避免静默丢数据),Python 3.10+ 可以用 zip(keys, values, strict=True)

其他写法

# 字典推导式 + enumerate
d = {k: values[i] for i, k in enumerate(keys)}

# 需要默认值填充缺失值时(itertools.zip_longest)
from itertools import zip_longest
d = dict(zip_longest(keys, values, fillvalue=None))

常见问题(FAQ)

Q:zip 的结果能直接用吗,为什么外面要套 dict()?
A:zip() 返回的是迭代器,产出 ('a', 1) 这样的元组对;dict() 接收"键值对序列"构造字典,所以要套一层。

Q:键有重复会怎样?
A:后出现的值覆盖先出现的值,字典键本身唯一。

Q:想反过来把字典拆成两个列表呢?
A:list(d.keys())list(d.values()),且 Python 3.7+ 字典保持插入顺序,两者顺序一一对应。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台