如何用fromkeys将列表转为值为索引的字典?求Python更优方法
使用fromkeys实现列表转索引字典及更优方案
一、用fromkeys的实现方法
dict.fromkeys() 默认会给所有键设置相同的初始值,要实现值为对应索引的需求,需要分两步操作:先通过fromkeys创建包含目标键的字典,再遍历列表更新每个键的值:
my_list = ["a", "b", "c", "d", "e"] # 先创建以列表元素为键的字典,初始值为None index_dict = dict.fromkeys(my_list) # 遍历列表,为每个键赋值对应的索引 for idx, item in enumerate(my_list): index_dict[item] = idx
执行后得到结果:{"a":0, "b":1, "c":2, "d":3, "e":4}
注意:如果列表中存在重复元素,后续出现的元素会覆盖前面的索引值(因字典键具有唯一性)。
二、更高效的替代方案
上述fromkeys方法是两次O(n)遍历(创建字典+赋值),整体时间复杂度为O(n),但可以用一次遍历的方式完成,代码更简洁高效:
1. 字典推导式(推荐)
直接通过enumerate()遍历列表,同时生成键值对,一次循环完成字典构建:
my_list = ["a", "b", "c", "d", "e"] index_dict = {item: idx for idx, item in enumerate(my_list)}
2. zip+range组合
将列表元素与对应的索引范围配对,再转换为字典,同样是一次O(n)操作:
my_list = ["a", "b", "c", "d", "e"] index_dict = dict(zip(my_list, range(len(my_list))))
这两种方案的时间复杂度均为O(n),且仅需一次遍历,比fromkeys的两步操作更高效,代码也更易读。
内容的提问来源于stack exchange,提问作者N Th
相关产品推荐
相关产品推荐

