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" } ]
フェーズごとにオブジェクトをグループ化し、合計を計算するには
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}]
フェーズとステップの両方でグループ化するには、複数レベルの groupby を使用できます:
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 中国語 Web サイトの他の関連記事を参照してください。