Habe ich das Rad mit dieser Deduplizierungsfunktion neu erfunden?

8

Ich habe nach einer set() -like-Methode gesucht, um eine Liste zu deduplizieren, mit der Ausnahme, dass die Elemente, die in der ursprünglichen Liste stehen, nicht hashbar sind (sie sind dict s).

Ich habe eine Weile nach etwas Angemessenem gesucht und am Ende habe ich diese kleine Funktion geschrieben:

%Vor%

Vorausgesetzt, dass ein key korrekt angegeben ist und ein string ist, erledigt diese Funktion ihre Aufgabe ziemlich gut. Unnötig zu sagen, wenn ich etwas über ein integriertes oder ein Standard-Bibliotheksmodul erfahre, das die gleiche Funktionalität erlaubt, werde ich meine kleine Routine gerne zugunsten einer standardmäßigen und robusten Wahl aufgeben.

Ist Ihnen diese Implementierung bekannt?

- Hinweis

Der folgende Einzeiler wurde aus dieser Antwort gefunden ,

%Vor%

ist zwar schlau, funktioniert aber nicht, weil ich mit Objekten als verschachteltes dict s arbeiten muss.

- Beispiel

Aus Gründen der Übersichtlichkeit folgt hier ein Beispiel für die Verwendung einer solchen Routine:

%Vor%     
Jivan 03.06.2016, 12:11
quelle

4 Antworten

3

Sie wählen nur die erste dict in Ihrer Liste für jeden einzelnen Wert für key aus. itertools.groupby ist das integrierte Tool, das das für Sie erledigen kann - sort and Gruppiere nach key und nimm nur die erste von jeder Gruppe:

%Vor%     
schwobaseggl 03.06.2016 12:47
quelle
0

Sie könnten eine kurze Version versuchen, die auf dem Link zu der Antwort basiert, die Sie in der Frage angegeben haben:

%Vor%

Beachten Sie, dass dies das letzte Element von Duplikaten annimmt.

    
DomTomCat 03.06.2016 12:36
quelle
0

Diese Antwort hilft Ihnen dabei, ein allgemeineres Problem zu lösen - suchen Sie nach einzigartigen Elementen und nicht nach einem einzelnen Attribut ( id in Ihrem Fall), aber wenn ein geschachteltes Attribut unterscheidet

Der folgende Code gibt eine Liste der Indizes der einzelnen Elemente zurück

%Vor%     
MaxU 03.06.2016 12:31
quelle
0

In Ihrem Beispiel ist der vom Schlüssel zurückgegebene Wert hashbar. Wenn dies immer der Fall ist, verwenden Sie Folgendes:

%Vor%

Wenn Duplikate vorhanden sind, wird nur das letzte übereinstimmende Duplikat beibehalten.

    
dln385 19.06.2016 20:23
quelle

Tags und Links