Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Entfernen Sie Duplikate in der Objektliste mit Python

Der set(list_of_objects) entfernt die Duplikate nur, wenn Sie wissen, was ein Duplikat ist, dh Sie müssen eine Eindeutigkeit eines Objekts definieren.

Dazu müssen Sie das Objekt hashfähig machen. Sie müssen beide __hash__ definieren und __eq__ Methode, hier ist wie:

http://docs.python.org/glossary.html#term-hashable

Allerdings müssen Sie wahrscheinlich nur __eq__ definieren Methode.

BEARBEITEN :Wie man den __eq__ implementiert Methode:

Wie bereits erwähnt, müssen Sie die Eindeutigkeitsdefinition Ihres Objekts kennen. Angenommen, wir haben ein Buch mit den Attributen author_name und title, deren Kombination einzigartig ist (also können wir viele Bücher haben, die Stephen King verfasst hat, und viele Bücher mit dem Namen The Shining, aber nur ein Buch mit dem Namen The Shining von Stephen King), dann die Implementierung lautet wie folgt:

def __eq__(self, other):
    return self.author_name==other.author_name\
           and self.title==other.title

Auf ähnliche Weise implementiere ich manchmal den __hash__ Methode:

def __hash__(self):
    return hash(('title', self.title,
                 'author_name', self.author_name))

Sie können überprüfen, ob, wenn Sie eine Liste mit 2 Büchern mit demselben Autor und Titel erstellen, die Buchobjekte gleich sind (mit is Operator) und gleich (mit == Operator). Auch wenn set() verwendet wird, wird ein Buch entfernt.

BEARBEITEN :Dies ist eine alte Antwort von mir, aber ich bemerke erst jetzt, dass sie den Fehler enthält, der im letzten Absatz durchgestrichen korrigiert wird:Objekte mit demselben hash() gibt nicht True zurück im Vergleich zu is . Die Hashfähigkeit von Objekten wird jedoch verwendet, wenn Sie beabsichtigen, sie als Elemente von Mengen oder als Schlüssel im Wörterbuch zu verwenden.