您的位置:首页 >高效查找对象数组中的单个对象方法
发布于2026-04-17 阅读(0)
扫一扫,手机访问

本文介绍如何将线性搜索的患者对象查找优化为哈希表(字典)查找,大幅提升处理大规模日志文件时的性能,核心是用 dict 替代 list 存储患者实例,并以 pat_id 为键实现 O(1) 平均时间复杂度的快速定位。
本文介绍如何将线性搜索的患者对象查找优化为哈希表(字典)查找,大幅提升处理大规模日志文件时的性能,核心是用 `dict` 替代 `list` 存储患者实例,并以 `pat_id` 为键实现 O(1) 平均时间复杂度的快速定位。
在处理海量医疗日志时,原始代码中使用 for pat in patient.all_patients 遍历整个患者列表进行 ID 匹配,属于典型的 O(n) 线性搜索。当患者数量达数千、日志行数超百万时,重复执行该逻辑会导致严重性能瓶颈——例如每行日志都遍历全部患者,总时间复杂度高达 O(n × m),极易成为性能瓶颈。
更优解是利用 Python 字典(dict)底层的哈希表结构,将查找复杂度降至 平均 O(1)。关键改造如下:
以下是优化后的完整实现:
class Patient:
def __init__(self, pat_id: int):
self.pat_id = pat_id
self.plans = [] # 使用普通 list,若需去重可考虑 set(注意保持插入顺序时慎用)
# 初始化空字典,替代原 all_patients 列表
patients = {}
total_plans = 0
# 假设 index 是当前日志行解析后的列表(如 index = line.strip().split('\t'))
patient_id = int(index[4]) # 确保类型一致,避免字符串/整数混用
plan_name = index[11]
# 方式1:显式判断 + 字典赋值(清晰易读)
if patient_id not in patients:
patients[patient_id] = Patient(patient_id)
# 添加计划(自动去重)
if plan_name not in patients[patient_id].plans:
patients[patient_id].plans.append(plan_name)
total_plans += 1
print(f"Total unique patients: {len(patients)}")
print(f"Total unique plans added: {total_plans}")? 进阶建议:若 plans 仅需唯一性且不依赖插入顺序,可将 self.plans 改为 set(),使 in 判断也保持 O(1);若需保留添加顺序并去重,可用 collections.OrderedDict 或 Python 3.7+ 的 dict.fromkeys(plans) 去重后重建列表。
⚠️ 注意事项:
通过这一重构,日志处理速度可提升数十至数百倍,真正实现可扩展的大数据医疗日志解析。
上一篇:学习通app官网正版下载安装
下一篇:知米背单词正常模式怎么开
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9