Mysql
 sql >> Base de données >  >> RDS >> Mysql

Supprimer les doublons dans la liste des objets avec Python

Le set(list_of_objects) ne supprimera les doublons que si vous savez ce qu'est un doublon, c'est-à-dire que vous devrez définir l'unicité d'un objet.

Pour ce faire, vous devrez rendre l'objet hachable. Vous devez définir à la fois __hash__ et __eq__ méthode, voici comment :

http://docs.python.org/glossary.html#term-hashable

Cependant, vous n'aurez probablement qu'à définir __eq__ méthode.

MODIFIER :Comment implémenter le __eq__ méthode :

Vous aurez besoin de connaître, comme je l'ai mentionné, la définition de l'unicité de votre objet. Supposons que nous ayons un livre avec les attributs author_name et title dont la combinaison est unique (ainsi, nous pouvons avoir de nombreux livres écrits par Stephen King et de nombreux livres nommés The Shining, mais un seul livre nommé The Shining de Stephen King), alors la mise en œuvre est le suivant :

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

De même, c'est ainsi que j'implémente parfois le __hash__ méthode :

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

Vous pouvez vérifier que si vous créez une liste de 2 livres avec le même auteur et le même titre, les objets du livre seront les mêmes (avec is opérateur) et égal (avec == opérateur). Aussi, quand set() est utilisé, il supprimera un livre.

MODIFIER :C'est une de mes anciennes réponses, mais je remarque seulement maintenant qu'elle a l'erreur qui est corrigée avec barré dans le dernier paragraphe :objets avec le même hash() ne donnera pas True par rapport à is . La capacité de hachage de l'objet est utilisée, cependant, si vous avez l'intention de les utiliser comme éléments d'ensemble ou comme clés dans le dictionnaire.