You need to enable JavaScript to run this app. 如何将数据存入Python dictionary以减少大文本文件重复处理耗时
优惠活动
大模型
产品
解决方案
定价
更多

如何将数据存入Python dictionary以减少大文本文件重复处理耗时

优化方案

核心思路

一次性读取整个10万行文件,将前50000行的检索关键字与关联数据提前存入Python字典,利用字典O(1)的查询特性,后续遍历后50000行时直接匹配查询,全程只需要读取文件1次。

具体实现步骤

  • 第一步:一次性读取文件所有行,避免重复IO操作
    10万行文本体积通常不超过百兆,完全可以全部加载到内存,无需逐次打开文件
  • 第二步:构造前半段内容的查询字典
    把前50000行中需要用来匹配的字段作为字典的key,该行需要提取的关联数据作为value,如果存在多行对应同一个key的场景,可以把value设为列表存储多条关联数据
  • 第三步:遍历后半段内容直接查询字典
    遍历第50001到100000行,提取待匹配的内容直接去字典中查询,存在就直接取出对应的关联数据即可

代码示例

# 替换为你的实际文件路径
file_path = "your_text_file.txt"

# 自定义关键字和关联数据的提取规则,可根据你的文本格式修改
def extract_key_value(line):
    # 示例假设文本为制表符分隔,第一列为检索关键字,第二列为需要提取的关联数据
    parts = line.strip().split("\t")
    match_key = parts[0]
    related_data = parts[1]
    return match_key, related_data

if __name__ == "__main__":
    # 仅读取1次文件,加载所有行到内存
    with open(file_path, "r", encoding="utf-8") as f:
        all_lines = f.readlines()
    
    # 按索引拆分前后半段,Python索引从0开始,前5万行对应索引0~49999,后5万行对应50000~99999
    first_half = all_lines[:50000]
    second_half = all_lines[50000:]

    # 构建查询字典
    query_dict = {}
    for line in first_half:
        line = line.strip()
        if not line:
            continue
        key, value = extract_key_value(line)
        if key not in query_dict:
            query_dict[key] = []
        # 同关键字多数据场景用列表存储
        query_dict[key].append(value)
    
    # 遍历后半段直接查询字典
    result = []
    for line in second_half:
        line = line.strip()
        if not line:
            continue
        match_key, _ = extract_key_value(line)
        if match_key in query_dict:
            result.extend(query_dict[match_key])
    
    # 后续可直接处理查询结果
    print(result)

优化效果说明

  • 原有循环打开文件检索的方案时间复杂度为O(M*N),M、N分别为前后半段行数,最坏情况下需要执行25亿次匹配操作
  • 优化后方案时间复杂度为O(M+N),总共仅需要遍历10万次,加上字典查询几乎无额外消耗,耗时会降至原有方案的几十分之一甚至更低
  • 内存占用极低,10万行文本全部加载到内存仅占几十MB,不会有内存压力

内容的提问来源于stack exchange,提问作者maheshbabukondaveeti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 19:27:03