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
Lepaskan: 2024-12-22 20:55:11
asal
933 orang telah melayarinya

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" }
]
Salin selepas log masuk

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)
Salin selepas log masuk

Ini menghasilkan yang diingini output:

[{"Phase": "Phase 1", "Value": 50}, {"Phase": "Phase 2", "Value": 130}]
Salin selepas log masuk

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)
Salin selepas log masuk

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}]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan