Mysql
 sql >> база данни >  >> RDS >> Mysql

Премахнете дубликатите в списъка с обекти с Python

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 . Хеширането на обекта се използва обаче, ако възнамерявате да ги използвате като елементи от набора или като ключове в речника.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. мога ли да се доверя на mysql_insert_id() да върне правилна стойност, многонишкова параноя

  2. Създайте C# класове, базирани на MySQL таблица

  3. Лоша практика ли е управлението на транзакциите в Контролера?

  4. Хибернирайте OneToOne мързеливо зареждане и каскадно

  5. MySQL автоматично увеличаване на персонализираните стойности