Python如何按image_name分组统计duration总和输出指定格式
按镜像名累加时长的实现方案
你需要对top_duration列表按image_name字段分组,累加同组的duration值,最终输出{总时长, 镜像名}格式的结果,以下是两种可直接运行的实现方式:
方案1:纯原生Python实现(无任何依赖)
不需要引入额外库,通过字典维护分组累加值即可,兼容性最好。
# 原始输入数据 top_duration = [ {"duration": 3752, "image_name": "ohcm-designer-orchestration-service"}, {"duration": 3471, "image_name": "ohcm-designer-orchestration-service"}, {"duration": 3452, "image_name": "metadata-validations-service"}, {"duration": 120, "image_name": "metadata-validations-service"}, {"duration": 114, "image_name": "metadata-validations-service"}, {"duration": 111, "image_name": "ohcm-metadata-dna-service"}, {"duration": 102, "image_name": "metadata-validations-service"}, {"duration": 100, "image_name": "metadata-runtime-proxy-service"}, ] # 遍历列表完成分组累加 sum_map = {} for item in top_duration: img_name = item["image_name"] dur = item["duration"] if img_name not in sum_map: sum_map[img_name] = 0 sum_map[img_name] += dur # 转换为要求的格式输出 result = [{total_dur, img_name} for img_name, total_dur in sum_map.items()]
运行后计算结果完全匹配需求:
metadata-validations-service对应结果为{3788, 'metadata-validations-service'}ohcm-designer-orchestration-service对应结果为{7223, 'ohcm-designer-orchestration-service'}ohcm-metadata-dna-service对应结果为{111, 'ohcm-metadata-dna-service'}metadata-runtime-proxy-service对应结果为{100, 'metadata-runtime-proxy-service'}
方案2:用标准库defaultdict简化逻辑
可以引入Python标准库collections中的defaultdict,省去手动判断键是否存在的步骤,代码更简洁:
from collections import defaultdict # 原始top_duration数据 top_duration = [ {"duration": 3752, "image_name": "ohcm-designer-orchestration-service"}, {"duration": 3471, "image_name": "ohcm-designer-orchestration-service"}, {"duration": 3452, "image_name": "metadata-validations-service"}, {"duration": 120, "image_name": "metadata-validations-service"}, {"duration": 114, "image_name": "metadata-validations-service"}, {"duration": 111, "image_name": "ohcm-metadata-dna-service"}, {"duration": 102, "image_name": "metadata-validations-service"}, {"duration": 100, "image_name": "metadata-runtime-proxy-service"}, ] sum_map = defaultdict(int) for item in top_duration: sum_map[item["image_name"]] += item["duration"] result = [{total_dur, img_name} for img_name, total_dur in sum_map.items()]
注意:Python中
{v1, v2}是无序集合结构,如果后续需要按固定位置取值(比如固定第一个元素是总时长、第二个是镜像名),建议将集合替换为元组(total_dur, img_name),避免集合无序导致的取值错误。
内容的提问来源于stack exchange,提问作者Deep_learner
相关产品推荐
相关产品推荐

