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()
будет удалена одна книга.
EDIT : Это один мой старый ответ, но я только сейчас замечаю, что в последнем абзаце есть ошибка, которая исправлена зачеркиванием: объекты с одинаковым hash()
не дадут True
по сравнению с is
. Однако хеш-объектность используется, если вы собираетесь использовать их как элементы набора или как ключи в словаре.