Il set(list_of_objects)
rimuoverà i duplicati solo se sai cos'è un duplicato, ovvero dovrai definire l'unicità di un oggetto.
Per fare ciò, dovrai rendere l'oggetto hashable. Devi definire entrambi __hash__
e __eq__
metodo, ecco come:
http://docs.python.org/glossary.html#term-hashable
Tuttavia, probabilmente dovrai solo definire __eq__
metodo.
MODIFICA :Come implementare il __eq__
metodo:
Avrai bisogno di conoscere, come ho già detto, la definizione di unicità del tuo oggetto. Supponiamo di avere un libro con attributi nome_autore e titolo che la loro combinazione è unica, (quindi, possiamo avere molti libri scritti da Stephen King e molti libri chiamati The Shining, ma solo un libro chiamato The Shining di Stephen King), quindi l'implementazione è il seguente:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
Allo stesso modo, è così che a volte implemento il __hash__
metodo:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
Puoi verificare che se crei un elenco di 2 libri con lo stesso autore e titolo, gli oggetti libro saranno gli stessi (con uguale (con is
operatore) e==
operatore). Inoltre, quando set()
viene utilizzato, rimuoverà un libro.
MODIFICA :Questa è una mia vecchia risposta, ma solo ora noto che ha l'errore che viene corretto con barrato nell'ultimo paragrafo:oggetti con lo stesso hash()
non darà True
se confrontato con is
. L'hashability degli oggetti viene tuttavia utilizzata se si intende utilizzarli come elementi di set o come chiavi nel dizionario.