Make a dictionary (dict) from separate lists of keys and values

Make a dictionary (dict) from separate lists of keys and values

技术背景

在Python编程中,经常会遇到需要将两个列表分别作为键和值,创建一个字典的需求。例如,有一个存储姓名的列表和一个存储年龄的列表,我们希望将姓名作为键,年龄作为值,创建一个字典来方便数据的查询和使用。

实现步骤

1. 使用dict构造函数和zip函数

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

2. 使用字典推导式

1
2
3
4
keys = ('name', 'age', 'food')
values = ('Monty', 42, 'spam')
new_dict = {k: v for k, v in zip(keys, values)}
print(new_dict)

3. Python 2中使用izip

1
2
3
4
5
from itertools import izip
keys = ('name', 'age', 'food')
values = ('Monty', 42, 'spam')
new_dict = dict(izip(keys, values))
print(new_dict)

核心代码

最常用的方法:dict(zip(keys, values))

1
2
3
4
keys = ('name', 'age', 'food')
values = ('Monty', 42, 'spam')
new_dict = dict(zip(keys, values))
print(new_dict)

字典推导式

1
2
3
4
keys = ('name', 'age', 'food')
values = ('Monty', 42, 'spam')
new_dict = {k: v for k, v in zip(keys, values)}
print(new_dict)

最佳实践

1. 性能考虑

在Python 3中,dict(zip(keys, values))是最具性能的方法,因为zip返回的是一个惰性迭代器,避免了不必要的中间数据结构的创建。

2. 列表长度不一致的情况

如果两个列表长度不一致,可以使用itertools.zip_longest

1
2
3
4
5
from itertools import zip_longest
keys = ['name', 'age', 'food']
values = ['Monty', 42]
dict(zip_longest(keys, values)) # {'name': 'Monty', 'age': 42, 'food': None}
dict(zip_longest(keys, values, fillvalue='spam')) # {'name': 'Monty', 'age': 42, 'food': 'spam'}

3. 基于子集创建字典

1
2
3
4
5
6
keys = ['name', 'age', 'food']
values = ['Monty', 42, 'spam', 'extra_value']
dct = {k: v for k, v in zip(keys, values) if v not in {'cheese', 'eggs', 'spam'}}
print(dct)
dct = {k: values[i] for i, k in enumerate(keys) if not i % 2}
print(dct)

常见问题

1. 列表长度不一致

zip函数会截断较长的列表,如果不希望这种情况发生,可以使用itertools.zip_longest

2. 性能问题

如果需要处理大量数据,建议使用dict(zip(keys, values)),因为它的性能最优。

3. 兼容性问题

在Python 2中,zip会返回一个列表,为了避免创建不必要的列表,可以使用izip。在Python 3中,izipzip替代。


Make a dictionary (dict) from separate lists of keys and values
https://119291.xyz/posts/make-a-dictionary-from-separate-lists-of-keys-and-values/
作者
ww
发布于
2025年5月26日
许可协议