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.