Python如何按名称查找字典中对应值集 替代循环遍历的优化方案
最优实现方案:预处理为映射字典
这是最高效的处理方式,仅需要遍历一次集合数组生成字典,后续所有查询都是O(1)时间复杂度,完全符合字典的设计逻辑:
# 读取JSON后仅执行一次预处理,将集合名称映射到对应的Values set_map = {item["Name"]: item["Values"] for item in protocol_data["sets"]}
后续需要取任意集合的Values时直接调用即可,无需再遍历:
set2_values = set_map["set2"] # 对set2_values执行相关操作
该方案几乎没有额外内存开销,字典中存储的Values都是原列表中数组的引用,不会重复存储数据,仅额外存储了名称到对应对象的映射关系。如果业务场景中存在集合名称重复的情况,可以调整预处理逻辑,将相同名称的Values合并存储为列表即可。
单次查询简化写法
如果你只是偶尔查询一两次,不想额外维护映射字典,可以用内置的next()函数简化遍历代码,不需要自己写for循环判断,不过时间复杂度还是O(n),和原有实现效率一致:
# 第二个参数为找不到对应名称时返回的默认值,避免抛出异常 target_values = next((item["Values"] for item in protocol_data["sets"] if item["Name"] == "set2"), None) if target_values is not None: # 执行相关操作
动态更新场景处理
如果运行过程中protocol_data["sets"]会动态新增/删除集合,只要在修改集合的同时同步更新set_map即可,不需要每次查询都重新构建映射。
内容的提问来源于stack exchange,提问作者alle_meije
相关产品推荐
相关产品推荐

