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
Libérer: 2024-12-22 20:55:11
original
933 Les gens l'ont consulté

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" }
]
Copier après la connexion

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)
Copier après la connexion

Cela donne le résultat souhaité :

[{"Phase": "Phase 1", "Value": 50}, {"Phase": "Phase 2", "Value": 130}]
Copier après la connexion

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)
Copier après la connexion

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}]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal