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
is
operador) e==
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.