Mysql
 sql >> Database >  >> RDS >> Mysql

Rimuovi i duplicati nell'elenco di oggetti con Python

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 is operatore) e uguale (con == 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.