Самый удобный, "путинский" способ удаления дубликатов из списка в основном:
mylist = list(set(mylist))
Но предположим, что ваши критерии подсчета дубликатов зависят от конкретного поля элемента объектов, содержащегося в mylist
.
Ну, одно решение состоит в том, чтобы просто определить __eq__
и __hash__
для объектов в mylist
, а затем классический list(set(mylist))
будет работать.
Но иногда у вас есть требования, требующие большей гибкости. Было бы очень удобно создавать на лету лямбды, чтобы использовать пользовательские процедуры сравнения для идентификации дубликатов по-разному. В идеале, что-то вроде:
mylist = list(set(mylist, key = lambda x: x.firstname))
Конечно, это на самом деле не работает, потому что конструктор set
не выполняет функцию сравнения, а set
требует также хэшируемых клавиш.
Итак, какой самый близкий способ добиться чего-то подобного, чтобы вы могли удалять дубликаты с помощью произвольных функций сравнения?