Itertools.groupby ()

Ich habe diese Daten:

self.data = list: [(1, 1, 5.0), (1, 2, 3.0), (1, 3, 4.0), (2, 1, 4.0), (2, 2, 2.0), (2, 3, 4.0), (2, 5, 3.0), (3, 2, 2.0), (3, 4, 4.0), (3, 5, 3.0)] 

Wenn ich diesen Code ausführe:

  • Izip funktioniert nicht in Python 3.x
  • Python itertools.combinations () Speicherprobleme
  • Python: Wie bekomme ich die Länge von itertools _grouper
  • Wie gruppiere ich ähnliche Artikel in einer Liste?
  • Mit itertools.product und wollen einen Wert säen
  • Itertools.groupby () in python
  •  for mid, group in itertools.groupby(self.data, key=operator.itemgetter(0)): 

    Für list(group) bekomme ich:

     list: [(1, 1, 5.0), (1, 2, 3.0), (1, 3, 4.0)] 

    Was ist was ich will

    Aber wenn ich 1 anstelle von 0 verwende

     for mid, group in itertools.groupby(self.data, key=operator.itemgetter(1)): 

    Um die zweite Nummer in den Tupeln zu gruppieren, bekomme ich nur:

     list: [(1, 1, 5.0)] 

    Obwohl es noch andere Tupel gibt, die "1" in dieser 1 (2.) Position haben.

  • Python dynamische Vererbung: Wie wählt man Basisklasse bei Instanzerstellung?
  • Dynamische Methode Bindung mit Vererbung in Python
  • Singleton über Module
  • Python JSON komplexe Objekte (unter Berücksichtigung der Unterklassen)
  • Wende if-elseif-Anweisungen ins Wörterbuch
  • Warum ist IoC / DI nicht in Python üblich?
  • 2 Solutions collect form web for “Itertools.groupby ()”

    Itertools.group sammelt zusammen zusammenhängende Gegenstände mit demselben Schlüssel. Wenn du alle Artikel mit der gleichen Taste self.data , musst self.data zuerst self.data sortieren.

     for mid, group in itertools.groupby( sorted(self.data,key=operator.itemgetter(1)), key=operator.itemgetter(1)): 

    Variante ohne Sortierung (über Wörterbuch). Sollte besser leistungsfähig sein.

     def full_group_by(l, key=lambda x: x): d = defaultdict(list) for item in l: d[key(item)].append(item) return d.items() 
    Python ist die beste Programmiersprache der Welt.