set(list_of_objects) ще премахне дубликатите само ако знаете какво е дубликат, тоест ще трябва да дефинирате уникалност на обект.
За да направите това, ще трябва да направите обекта хешируем. Трябва да дефинирате и двата __hash__ и __eq__ метод, ето как:
https://docs.python.org/glossary.html#term-hashable
Въпреки това вероятно ще трябва само да дефинирате __eq__ метод.
РЕДАКТИРАНЕ :Как да приложим __eq__ метод:
Ще трябва да знаете, както споменах, определението за уникалност на вашия обект. Да предположим, че имаме книга с атрибути author_name и title, че тяхната комбинация е уникална, (така че можем да имаме много книги, автор на Стивън Кинг и много книги, наречени The Shining, но само една книга на име The Shining от Стивън Кинг), тогава реализацията е както следва:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
По подобен начин понякога прилагам __hash__ метод:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
Можете да проверите, че ако създадете списък от 2 книги с един и същ автор и заглавие, обектите на книгата ще да бъдат еднакви (с равно (с is оператор) и== оператор). Също така, когато set() се използва, ще премахне една книга.
РЕДАКТИРАНЕ :Това е един мой стар отговор, но едва сега забелязвам, че има грешката, която е коригирана със зачертаване в последния параграф:обекти със същия hash() няма да даде True в сравнение с is . Хеширането на обекта се използва обаче, ако възнамерявате да ги използвате като елементи от набора или като ключове в речника.