set(list_of_objects) usunie duplikaty tylko wtedy, gdy wiesz, co to jest duplikat, to znaczy, że musisz zdefiniować unikalność obiektu.
Aby to zrobić, musisz sprawić, by obiekt był haszowalny. Musisz zdefiniować oba __hash__ i __eq__ metoda, oto jak:
https://docs.python.org/glossary.html#term-hashable
Chociaż prawdopodobnie będziesz musiał tylko zdefiniować __eq__ metoda.
EDYTUJ :Jak zaimplementować __eq__ metoda:
Musisz znać, jak wspomniałem, definicję niepowtarzalności swojego obiektu. Załóżmy, że mamy Księgę z atrybutami nazwisko_autora i tytuł, których połączenie jest unikalne (więc możemy mieć wiele książek autorstwa Stephena Kinga i wiele książek o nazwie Lśnienie, ale tylko jedną książkę pod tytułem Lśnienie autorstwa Stephena Kinga), a następnie implementacja wygląda następująco:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
Podobnie, w ten sposób czasami implementuję __hash__ metoda:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
Możesz sprawdzić, czy jeśli utworzysz listę 2 książek o tym samym autorze i tytule, obiekty książki będą takie same (z równe (z is operatora) i== operator). Również, gdy set() zostanie użyty, usunie jedną książkę.
EDYTUJ :To jedna z moich starych odpowiedzi, ale dopiero teraz zauważyłem, że zawiera błąd, który został poprawiony przez przekreślenie w ostatnim akapicie:obiekty z tym samym hash() nie da True w porównaniu z is . Hashability obiektu jest jednak używane, jeśli zamierzasz używać ich jako elementów zestawu lub jako kluczy w słowniku.