首页 > web前端 > js教程 > Python 的'groupby”方法如何有效地对对象数组中的数据进行分组和聚合?

Python 的'groupby”方法如何有效地对对象数组中的数据进行分组和聚合?

Susan Sarandon
发布: 2024-12-22 20:55:11
原创
933 人浏览过

How can Python's `groupby` method efficiently group and aggregate data from arrays of objects?

使用 GroupBy 方法对数组中的对象进行分组

Python 强大的 groupby 方法可以根据选定的属性对对象进行高效分组。如果您需要执行此类分组操作,groupby 提供了一个方便的解决方案。

例如,考虑以下对象数组:

[ 
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
    { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" },
    { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
    { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" },
    { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" },
    { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" },
    { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" }
]
登录后复制

按 Phase 对对象进行分组并计算总和值,我们使用:

from itertools import groupby

def sum_value(objects):
    return sum(int(obj["Value"]) for obj in objects)

objects.sort(key=lambda obj: obj["Phase"])
grouped_by_phase = groupby(objects, key=lambda obj: obj["Phase"])

result = [{
    "Phase": phase,
    "Value": sum_value(objects)
} for phase, objects in grouped_by_phase]

print(result)
登录后复制

这会产生所需的输出:

[{"Phase": "Phase 1", "Value": 50}, {"Phase": "Phase 2", "Value": 130}]
登录后复制

或者,要按阶段和步骤进行分组,我们可以使用多个级别的分组:

grouped_by_phase_and_step = groupby(objects, key=lambda obj: (obj["Phase"], obj["Step"]))

result = [{
    "Phase": phase,
    "Step": step,
    "Value": sum_value(objects)
} for (phase, step), objects in grouped_by_phase_and_step]

print(result)
登录后复制

这将返回:

[{"Phase": "Phase 1", "Step": "Step 1", "Value": 15}, {"Phase": "Phase 1", "Step": "Step 2", "Value": 35}, {"Phase": "Phase 2", "Step": "Step 1", "Value": 55}, {"Phase": "Phase 2", "Step": "Step 2", "Value": 75}]
登录后复制

通过Python多功能的groupby方法,您可以轻松高效地对对象数组中的数据进行分组和聚合,满足您的各种分组需求。

以上是Python 的'groupby”方法如何有效地对对象数组中的数据进行分组和聚合?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板