Nehmen wir an, ich habe die folgenden zwei Listen von Tupeln
%Vor%Ich möchte eine Zusammenführungsoperation entwerfen, die diese beiden Listen zusammenführt, indem ich nach Kreuzungen auf dem ersten Element des Tupels suche. Wenn es Kreuzungen gibt, füge die zweiten Elemente jedes fraglichen Tupels hinzu (füge die beiden zusammen). Nach der Operation möchte ich basierend auf dem ersten Element sortieren.
Ich poste das auch, weil ich denke, dass es ein ziemlich häufiges Problem ist, das eine offensichtliche Lösung hat, aber ich denke, dass es sehr pythische Lösungen für diese Frage geben könnte;)
Verwenden Sie ein Wörterbuch für das Ergebnis:
%Vor% Wenn Sie eine Liste von Tupeln haben möchten, können Sie sie über result.items()
erhalten. Die resultierende Liste wird in beliebiger Reihenfolge angezeigt, aber natürlich können Sie sie auch sortieren, falls gewünscht.
(Beachten Sie, dass ich Ihre Listen umbenannt habe, um den Stilkonventionen von Python zu entsprechen.)
Verwenden Sie defaultdict:
%Vor% Hinweis: Beim Sortieren von Sequenzen sortiert sorted
nach dem ersten Element in der Sequenz. Wenn die ersten Elemente gleich sind, vergleicht es das zweite Element. Sie können sorted
eine Funktion zum Sortieren geben, indem Sie das key
Schlüsselwort-Argument verwenden:
oder
%Vor%Eine Methode, die itertools verwendet:
%Vor%Dadurch werden zuerst die beiden Listen miteinander verknüpft und sortiert. itertools.groupby gibt die Elemente der zusammengeführten Liste zurück, gruppiert nach dem ersten Element des Tupels, also fasst er sie zusammen und fügt sie in die zusammengeführte Liste ein.
getestet für Python2.7 und 3.2
dict(myList + otherList).keys()
gibt einen iterablen Wert zurück, der eine Menge der Schlüssel für die verbundenen Listen enthält. sum(...)
nimmt 'k', um die verknüpfte Liste erneut zu durchlaufen und zu addieren Tupel-Elemente 'v' mit k == x
... aber die zusätzliche Schleifenbildung erhöht den Verarbeitungsaufwand. Die Verwendung eines expliziten Wörterbuchs wie von Sven Marnach vorgeschlagen, vermeidet es.
Tags und Links python list set intersection