Après quelques essais, j'ai surmonté ma blocage mental. En rétrospective, il est tout évident, mais dans l'esprit de Dépassement de Pile, voici ce que j'ai appris.
Comme Sebastjan dit, *tout d'abord vous devez trier vos données. Ce qui est important.*
La partie que je n'ai pas l'obtenir, c'est que dans l'exemple de la construction
groups = []
uniquekeys = []
for k, g in groupby(data, keyfunc):
groups.append(list(g)) # Store group iterator as a list
uniquekeys.append(k)
"k" est le regroupement actuel de la clé, et "g" est un itérateur que vous pouvez utiliser pour effectuer une itération sur le groupe, défini par le fait que le regroupement de la clé. En d'autres termes, le groupby itérateur lui-même renvoie les itérateurs. Voici un exemple, en utilisant plus clair les noms de variables:
from itertools import groupby
things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"), ("vehicle", "school bus")]
for key, group in groupby(things, lambda x: x[0]):
for thing in group:
print "A %s is a %s." % (thing[1], key)
print " "
Cela vous donnera le résultat:
Un ours est un animal.
Un canard est un animal.
Un cactus est une plante.
Un bateau à moteur est un véhicule.
Un autobus est un véhicule.
Dans cet exemple, les "choses" est une liste de tuples où le premier élément de chaque tuple est le groupe le deuxième élément appartient. La fonction groupby() prend deux arguments: (1) les données de groupe et (2) la fonction de groupe. Ici, "lambda x: x[0]," raconte l'groupby() pour utiliser le premier élément de chaque tuple comme le regroupement de la clé.
Dans l'au-delà "pour" déclaration, groupby retourne trois (clé, groupe itérateur) paires - une fois pour chaque clé unique. Vous pouvez utiliser le retour de l'itérateur pour parcourir chaque élément individuel que de groupe.
Voici un exemple légèrement différent avec les mêmes données, à l'aide d'une compréhension de liste:
for key, group in groupby(things, lambda x: x[0]):
listOfThings = " and ".join(["%s" % thing[1] for thing in group])
print key + "s: " + listOfThings + "."
Cela vous donnera le résultat:
animaux: l'ours et le canard.
plantes: cactus.
véhicules: vitesse du bateau et de bus d'école.
Python est plutôt cool, non?