Gérer efficacement les objets en double avec Python
En Python, il peut être nécessaire de supprimer les objets en double d'une liste tout en conservant l'ordre d'origine. Ce problème survient lorsque vous disposez d'une liste d'objets personnalisés et que vous souhaitez filtrer les doublons en fonction de certains critères ou rechercher les doublons dans une base de données.
En ce qui concerne vos besoins spécifiques, vous devez définir le caractère unique de vos objets pour pouvoir les utiliser efficacement. la méthode set(list_of_objects). Cela implique de rendre vos objets hachables en implémentant les méthodes eq et hash.
La méthode eq définit l'égalité des objets. Par exemple, si vous avez des objets Book avec les attributs author_name et title, où la combinaison de l'auteur et du titre est unique, la méthode eq pourrait ressembler à ceci :
<code class="python">def __eq__(self, other): return self.author_name == other.author_name and self.title == other.title</code>
De même, la méthode La méthode hash génère une valeur de hachage pour l'objet. Une approche courante consiste à hacher un tuple d'attributs clés :
<code class="python">def __hash__(self): return hash(('title', self.title, 'author_name', self.author_name))</code>
Avec ces méthodes en place, vous pouvez désormais supprimer les doublons d'une liste d'objets Book :
<code class="python">books = [Book('title1', 'author1'), Book('title2', 'author2'), Book('title1', 'author1')] unique_books = list(set(books))</code>
De plus, pour vérifier les doublons dans une base de données, vous pouvez utiliser l'approche suivante :
<code class="python">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]</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!