面试题答案
一键面试- 使用字典推导式将两个列表转换为字典:
keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = {keys[i]: values[i] for i in range(len(keys))}
print(my_dict)
- 如果两个列表长度不一致可能出现的问题:
- 如果
keys
列表长度大于values
列表长度,在使用上述推导式时,values
列表会先耗尽,导致range(len(keys))
超出values
列表的索引范围,从而引发IndexError
。 - 如果
values
列表长度大于keys
列表长度,多余的values
列表元素将不会被使用,不会引发错误,但可能不符合预期,因为没有足够的键来匹配这些值。
- 如果
- 解决方法:
- 使用
zip
函数:zip
函数会在最短的可迭代对象耗尽时停止。例如:
- 使用
keys = ['a', 'b', 'c']
values = [1, 2, 3, 4]
my_dict = {k: v for k, v in zip(keys, values)}
print(my_dict)
- 使用
itertools.zip_longest
(处理不等长列表并填充缺失值):
from itertools import zip_longest
keys = ['a', 'b', 'c']
values = [1, 2]
my_dict = {k: v for k, v in zip_longest(keys, values, fillvalue=None)}
print(my_dict)
这里使用zip_longest
并通过fillvalue
参数指定填充值(这里设为None
),可以处理keys
和values
长度不一致的情况,确保不会丢失任何键值对信息。