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)
k
ist der aktuelle Gruppierungsschlüssel und g
ein Iterator, mit dem Sie die durch diesen Gruppierungsschlüssel definierte Gruppe durchlaufen können. Mit anderen Worten, der groupby
Iterator 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 things
handelt 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 for
Anweisung groupby
drei 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.