WICHTIGER HINWEIS: Sie müssen zuerst Ihre Daten sortieren .
Der Teil, den ich nicht bekommen habe, ist der in der Beispielkonstruktion
groups = []
uniquekeys = []
for k, g in groupby(data, keyfunc):
groups.append(list(g)) # Store group iterator as a list
uniquekeys.append(k)
kist der aktuelle Gruppierungsschlüssel und gein Iterator, mit dem Sie die durch diesen Gruppierungsschlüssel definierte Gruppe durchlaufen können. Mit anderen Worten, der groupbyIterator selbst gibt Iteratoren zurück.
Hier ist ein Beispiel dafür mit klareren Variablennamen:
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 " "
Dies gibt Ihnen die Ausgabe:
Ein Bär ist ein Tier.
Eine Ente ist ein Tier.
Ein Kaktus ist eine Pflanze.
Ein Schnellboot ist ein Fahrzeug.
Ein Schulbus ist ein Fahrzeug.
In diesem Beispiel thingshandelt es sich um eine Liste von Tupeln, bei denen das erste Element in jedem Tupel die Gruppe ist, zu der das zweite Element gehört.
Die groupby()Funktion benötigt zwei Argumente: (1) die zu gruppierenden Daten und (2) die Funktion, mit der sie gruppiert werden sollen.
Hier wird angegeben, lambda x: x[0]dass groupby()das erste Element in jedem Tupel als Gruppierungsschlüssel verwendet werden soll.
Gibt in der obigen forAnweisung groupbydrei Paare (Schlüssel, Gruppeniterator) zurück - einmal für jeden eindeutigen Schlüssel. Mit dem zurückgegebenen Iterator können Sie jedes einzelne Element in dieser Gruppe durchlaufen.
Hier ist ein etwas anderes Beispiel mit denselben Daten unter Verwendung eines Listenverständnisses:
for key, group in groupby(things, lambda x: x[0]):
listOfThings = " and ".join([thing[1] for thing in group])
print key + "s: " + listOfThings + "."
Dies gibt Ihnen die Ausgabe:
Tiere: Bär und Ente.
Pflanzen: Kaktus.
Fahrzeuge: Schnellboot und Schulbus.