Rumah >hujung hadapan web >tutorial js >Bagaimanakah kaedah `groupby` Python boleh mengumpulkan dan mengagregat data dengan cekap daripada tatasusunan objek?

Bagaimanakah kaedah `groupby` Python boleh mengumpulkan dan mengagregat data dengan cekap daripada tatasusunan objek?

Susan Sarandon
Susan Sarandonasal
2024-12-22 20:55:11934semak imbas

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

Mengumpulkan Objek dalam Tatasusunan Menggunakan Kaedah GroupBy

Kaedah kumpulan mengikut Python yang berkuasa membolehkan pengumpulan objek yang cekap berdasarkan atribut terpilih. Jika anda perlu melakukan operasi pengumpulan sedemikian, groupby menawarkan penyelesaian yang mudah.

Sebagai contoh, pertimbangkan tatasusunan objek berikut:

[ 
    { 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" }
]

Untuk mengumpulkan objek mengikut Fasa dan mengira jumlah daripada Nilai, kami menggunakan:

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)

Ini menghasilkan yang diingini output:

[{"Phase": "Phase 1", "Value": 50}, {"Phase": "Phase 2", "Value": 130}]

Sebagai alternatif, untuk mengumpulkan mengikut Fasa dan Langkah, kita boleh menggunakan berbilang peringkat kumpulan mengikut:

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)

Ini mengembalikan:

[{"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}]

Dengan kaedah kumpulan mengikut kaedah Python yang serba boleh, anda boleh mengumpulkan dan mengagregat data dengan mudah dan cekap daripada tatasusunan objek, memenuhi pelbagai kumpulan anda keperluan.

Atas ialah kandungan terperinci Bagaimanakah kaedah `groupby` Python boleh mengumpulkan dan mengagregat data dengan cekap daripada tatasusunan objek?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn