Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Remova duplicatas na lista de objetos com Python


O set(list_of_objects) só irá remover as duplicatas se você souber o que é uma duplicata, ou seja, você precisará definir uma exclusividade de um objeto.

Para fazer isso, você precisará tornar o objeto hashable. Você precisa definir tanto __hash__ e __eq__ método, veja como:

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

No entanto, você provavelmente só precisará definir __eq__ método.

EDITAR :Como implementar o __eq__ método:

Você precisará saber, como mencionei, a definição de exclusividade do seu objeto. Suponha que tenhamos um livro com os atributos nome_autor e título que sua combinação é única, (assim, podemos ter muitos livros de autoria de Stephen King, e muitos livros chamados O Iluminado, mas apenas um livro chamado O Iluminado de Stephen King), então a implementação é o seguinte:
def __eq__(self, other):
    return self.author_name==other.author_name\
           and self.title==other.title

Da mesma forma, é assim que às vezes implemento o __hash__ método:
def __hash__(self):
    return hash(('title', self.title,
                 'author_name', self.author_name))

Você pode verificar que se você criar uma lista de 2 livros com o mesmo autor e título, os objetos do livro serão os mesmos (com is operador) e igual (com == operador). Além disso, quando set() for usado, ele removerá um livro.

EDITAR :Esta é uma resposta minha antiga, mas só agora noto que tem o erro que é corrigido com tachado no último parágrafo:objetos com o mesmo hash() não dará True quando comparado com is . A capacidade de hash do objeto é usada, no entanto, se você pretende usá-los como elementos do conjunto ou como chaves no dicionário.