MST

星途 面试题库

面试题:Python字典推导式中等难度题目

假设有两个列表,一个是keys = ['a', 'b', 'c'],另一个是values = [1, 2, 3],请使用字典推导式将这两个列表转换为字典,要求字典的键来自keys列表,值来自values列表。同时,请说明如果两个列表长度不一致可能会出现什么问题,并如何解决。
29.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 使用字典推导式将两个列表转换为字典:
keys = ['a', 'b', 'c']
values = [1, 2, 3]
my_dict = {keys[i]: values[i] for i in range(len(keys))}
print(my_dict) 
  1. 如果两个列表长度不一致可能出现的问题
    • 如果keys列表长度大于values列表长度,在使用上述推导式时,values列表会先耗尽,导致range(len(keys))超出values列表的索引范围,从而引发IndexError
    • 如果values列表长度大于keys列表长度,多余的values列表元素将不会被使用,不会引发错误,但可能不符合预期,因为没有足够的键来匹配这些值。
  2. 解决方法
    • 使用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),可以处理keysvalues长度不一致的情况,确保不会丢失任何键值对信息。