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 égal (avec is
opérateur) et==
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.