如何按Image公共名称匹配对应索引OutputScore计算平均值
实现方案
核心处理逻辑
- 对齐
Image和OutputScore的索引,逐对遍历图片路径和对应分数 - 从每个图片路径中提取公共名称:拆分路径拿到文件名后,提取文件名开头、数字串之前的字符串,就是Chin、Nose这类公共标识名
- 按公共名称对分数分组,仅保留出现次数≥2的公共名称分组
- 对每个保留的分组计算分数平均值
可运行代码(Python)
import re from collections import defaultdict # 原始输入数据 raw_data = { "Image": [ "22301657205688/Chin2231657205705u3zK.jpeg", "22301657205688/Chin2231657205707k6HN.jpeg", "22301657205688/Chin2231657205708Ip57.jpeg", "22301657205688/Forehead2231657205693CbX9.jpeg", "22301657205688/L Cheek2231657205697g8d4.jpeg", "22301657205688/Nose22316572057008AGT.jpeg", "22301657205688/Nose2231657205702k9OU.jpeg" ], "OutputScore": [3,9,9,3,1,3,9], "TotalScore": 5.285714285714286 } # 按公共名称归集对应分数 score_groups = defaultdict(list) for img_path, score in zip(raw_data["Image"], raw_data["OutputScore"]): file_name = img_path.split("/")[-1] # 匹配文件名开头所有非数字字符,即为公共名称 common_name = re.match(r'^(\D+)', file_name).group(1) score_groups[common_name].append(score) # 计算重复出现公共名称的平均分 avg_result = {} for name, scores in score_groups.items(): if len(scores) >= 2: avg_result[name] = sum(scores) / len(scores) print(avg_result)
运行结果
代码执行后输出结果为:
{'Chin': 7.0, 'Nose': 6.0}
逻辑校验:Chin对应索引0、1、2的三个分数3、9、9,平均值为7;Nose对应索引5、6的两个分数3、9,平均值为6,完全匹配需求计算规则。如果需要调整小数保留位数,给计算结果套
round(数值, 保留位数)即可。
内容的提问来源于stack exchange,提问作者iHarshil
相关产品推荐
相关产品推荐

