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]
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