Python中根据查找字典键值为列表索引分配标签的优化方案咨询
需求说明
- 输入索引列表:
[0,1,2,3,4,5,6,7,8,9,10,11,12,13] - 查找字典
m定义如下:
m={ "fir": [0,1,3,4,5], "sec": [2,7,12], "thr": [6,11], "fou": [8,9,10,13] }
- 预期输出标签列表:
['fir', 'fir', 'sec', 'fir', 'fir', 'fir', 'thr', 'sec', 'fou', 'fou', 'fou', 'thr', 'sec', 'fou']
现有嵌套循环的实现可以得到正确结果,但存在执行效率低的问题:每次索引匹配都要遍历所有key,且in列表操作本身是线性查找,数据量越大性能损耗越明显。
优化实现方案
最优的思路是提前构建索引到标签的反向映射字典,仅需两次线性遍历即可得到结果,时间复杂度从原方案的O(nk)降到O(n)*(n为索引总数,k为字典key数量),实现代码如下:
m = { "fir": [0,1,3,4,5], "sec": [2,7,12], "thr": [6,11], "fou": [8,9,10,13] } # 构建反向查找映射:key为索引,value为对应标签 idx_label_map = {} for label, idx_list in m.items(): for idx in idx_list: idx_label_map[idx] = label # 按索引顺序直接取值生成结果 result = [idx_label_map[i] for i in range(len(idx_label_map))]
该方案代码可读性更高,执行效率远高于嵌套循环,尤其适合索引数量较大的场景。
内容的提问来源于stack exchange,提问作者rpb
相关产品推荐
相关产品推荐

