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 l'unicité de vos objets pour 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 :
def __eq__(self, other):
return self.author_name == other.author_name and self.title == other.title
De même, 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 :
def __hash__(self):
return hash(('title', self.title, 'author_name', self.author_name))
Avec ces méthodes en place, vous pouvez désormais supprimer les doublons d'une liste d'objets Book :
books = [Book('title1', 'author1'), Book('title2', 'author2'), Book('title1', 'author1')]
unique_books = list(set(books))
De plus, pour vérifier les doublons dans une base de données, vous pouvez utiliser l'approche suivante :
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]
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3