Python Einfachster Weg zur Summenliste Schnittpunkt der Tupelliste

7

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;)

    
jab 25.07.2012, 16:03
quelle

4 Antworten

14

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.)

    
Sven Marnach 25.07.2012, 16:08
quelle
4

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:

%Vor%

oder

%Vor%     
Joel Cornett 25.07.2012 16:12
quelle
1

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.

    
jterrace 25.07.2012 16:10
quelle
0
%Vor%

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.

    
user6498743 26.07.2012 16:23
quelle

Tags und Links