Maison >interface Web >js tutoriel >Comment la méthode « groupby » de Python peut-elle regrouper et agréger efficacement les données de tableaux d'objets ?

Comment la méthode « groupby » de Python peut-elle regrouper et agréger efficacement les données de tableaux d'objets ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 20:55:11873parcourir

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

Regroupement d'objets dans des tableaux à l'aide de la méthode GroupBy

La puissante méthode groupby de Python permet un regroupement efficace d'objets en fonction des attributs sélectionnés. Si vous devez effectuer de telles opérations de regroupement, groupby offre une solution pratique.

Par exemple, considérons le tableau d'objets suivant :

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

Pour regrouper les objets par phase et calculer la somme de valeur, nous utilisons :

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)

Cela donne le résultat souhaité :

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

Alternativement, pour regrouper par à la fois Phase et Step, nous pouvons utiliser plusieurs niveaux de 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)

Cela renvoie :

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

Avec la méthode groupby polyvalente de Python, vous pouvez facilement et efficacement regrouper et agréger les données de tableaux d'objets, répondant à vos différentes exigences de regroupement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn