Maison  >  Article  >  base de données  >  Comment supprimer efficacement les objets en double d’une liste Python tout en préservant l’ordre ?

Comment supprimer efficacement les objets en double d’une liste Python tout en préservant l’ordre ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 00:22:30339parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn