set(list_of_objects)
ще премахне дубликатите само ако знаете какво е дубликат, тоест ще трябва да дефинирате уникалност на обект.
За да направите това, ще трябва да направите обекта хешируем. Трябва да дефинирате и двата __hash__
и __eq__
метод, ето как:
http://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
. Хеширането на обекта се използва обаче, ако възнамерявате да ги използвате като елементи от набора или като ключове в речника.