You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将图片OCR结果分组存储的循环代码简化为字典推导式?

简化图片OCR结果的字典生成代码为字典推导式

首先得说明:字典推导式天生更适合一对一的映射场景,而你的原代码是一对多(一个key对应多个OCR结果),所以直接写推导式没法一步到位,得先把文件按key分组,再生成最终的字典。

另外,原代码里判断str(i[1]) != '_'的逻辑其实有点脆弱——如果哪天文件名格式微调(比如编号变成3位)就会失效,不如直接通过下划线分割来提取key,更健壮。

下面是优化后的简化代码,兼顾了字典推导式和可读性:

import os
import pytesseract
from itertools import groupby
from operator import itemgetter

# 第一步:生成(编号key, 完整文件路径)的列表
file_key_pairs = [
    (filename.split('_')[0], os.path.join('images', filename))
    for filename in os.listdir('images')
]

# 第二步:按key分组,用字典推导式生成最终结果
data_dict = {
    key: [pytesseract.image_to_string(file_path) for _, file_path in group]
    for key, group in groupby(sorted(file_key_pairs, key=itemgetter(0)), key=itemgetter(0))
}

代码细节解释:

  1. 提取key的优化:用filename.split('_')[0]直接获取下划线前的编号,不管是1位还是2位数字都能正确提取,比原代码的字符判断更靠谱。
  2. 完整文件路径:原代码里直接用i(文件名)传给image_to_string可能会报错,因为当前工作目录不一定是images,所以用os.path.join拼接完整路径更稳妥。
  3. 分组与推导:先用列表推导式生成所有文件的key和路径对,再用groupby按key分组(注意groupby需要先排序,所以先对列表按key排序),最后用字典推导式遍历每组,生成对应key的OCR结果列表。

如果不想引入itertools,也可以用collections.defaultdict先收集,再转成普通字典,这个版本比原代码更简洁,同时修复了路径问题:

import os
import pytesseract
from collections import defaultdict

data_dict = defaultdict(list)
for filename in os.listdir('images'):
    key = filename.split('_')[0]
    data_dict[key].append(pytesseract.image_to_string(os.path.join('images', filename)))

# 转成普通字典(可选操作)
data_dict = dict(data_dict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:28:12