„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie entferne ich doppelte Objekte effizient aus einer Python-Liste und behalte dabei gleichzeitig die Reihenfolge bei?

Wie entferne ich doppelte Objekte effizient aus einer Python-Liste und behalte dabei gleichzeitig die Reihenfolge bei?

Veröffentlicht am 03.11.2024
Durchsuche:439

How Do I Efficiently Remove Duplicate Objects from a Python List While Preserving Order?

Effizienter Umgang mit doppelten Objekten mit Python

In Python kann es erforderlich sein, doppelte Objekte aus einer Liste zu entfernen und dabei die ursprüngliche Reihenfolge beizubehalten. Dieses Problem tritt auf, wenn Sie über eine Liste benutzerdefinierter Objekte verfügen und Duplikate anhand bestimmter Kriterien filtern oder in einer Datenbank nach Duplikaten suchen möchten.

Bezüglich Ihrer spezifischen Anforderungen müssen Sie die Eindeutigkeit innerhalb Ihrer Objekte definieren, um sie effektiv nutzen zu können die set(list_of_objects)-Methode. Dazu müssen Sie Ihre Objekte hashbar machen, indem Sie die Methoden eq und hash implementieren.

Die Methode eq definiert Objektgleichheit. Wenn Sie beispielsweise Buchobjekte mit den Attributen „Autorname“ und „Titel“ haben, bei denen die Kombination aus Autor und Titel eindeutig ist, könnte die Methode eq so aussehen:

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

In ähnlicher Weise generiert die Methode hash einen Hashwert für das Objekt. Ein gängiger Ansatz besteht darin, ein Tupel von Schlüsselattributen zu hashen:

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

Mit diesen Methoden können Sie jetzt Duplikate aus einer Liste von Buchobjekten entfernen:

books = [Book('title1', 'author1'), Book('title2', 'author2'), Book('title1', 'author1')]
unique_books = list(set(books))

Um außerdem nach Duplikaten in einer Datenbank zu suchen, können Sie den folgenden Ansatz verwenden:

import sqlalchemy

session = sqlalchemy.orm.sessionmaker()()
records = session.query(YourModel).all()
existing_titles = set([record.title for record in records])
unique_objects = [obj for obj in objects if obj.title not in existing_titles]
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3