← retour aux snippets

itertools.groupby: grouper après tri

Regrouper des lignes par clé; nécessite un tri préalable.

python algorithms #itertools#groupby#aggregate

objectif

Regrouper des lignes par clé; nécessite un tri préalable.

code minimal

import itertools
rows = [("b",2), ("a",1), ("a",3)]
rows.sort(key=lambda x: x[0])
groups = {k: [v for _, v in g] for k, g in itertools.groupby(rows, key=lambda x: x[0])}
print(groups["a"] == [1,3])  # attendu: True

utilisation

import itertools
data = sorted(["a","b","a","c"])
gs = [(k, len(list(g))) for k, g in itertools.groupby(data)]
print(dict(gs)["a"] == 2)

variante(s) utile(s)

import itertools
pairs = [(1,"x"), (1,"y"), (2,"z")]
pairs.sort(key=lambda t: t[0])
print(len(list(itertools.groupby(pairs, key=lambda t: t[0]))) == 2)

notes

  • groupby regroupe uniquement les éléments consécutifs -> triez d’abord.
  • Transformez les itérateurs en listes si réutilisation nécessaire.