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:
https://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.