sql >> Databáze >  >> RDS >> Mysql

Odstraňte duplikáty v seznamu objektů pomocí Pythonu

set(list_of_objects) odstraní duplikáty pouze v případě, že víte, co je duplikát, to znamená, že budete muset definovat jedinečnost objektu.

Chcete-li to provést, musíte objekt nastavit jako hašovatelný. Musíte definovat oba __hash__ a __eq__ metodou, zde je postup:

http://docs.python.org/glossary.html#term-hashable

Pravděpodobně však budete muset definovat pouze __eq__ metoda.

UPRAVIT :Jak implementovat __eq__ metoda:

Budete potřebovat znát, jak jsem již zmínil, definici jedinečnosti vašeho objektu. Předpokládejme, že máme knihu s atributy jméno autora a název, jejichž kombinace je jedinečná (takže můžeme mít mnoho knih, které napsal Stephen King, a mnoho knih s názvem The Shining, ale pouze jednu knihu s názvem The Shining od Stephena Kinga), pak implementace je následující:

def __eq__(self, other):
    return self.author_name==other.author_name\
           and self.title==other.title

Podobně někdy implementuji __hash__ metoda:

def __hash__(self):
    return hash(('title', self.title,
                 'author_name', self.author_name))

Můžete zkontrolovat, že pokud vytvoříte seznam 2 knih se stejným autorem a názvem, objekty knihy budou stejné (s is operátor) a rovná se (s == operátor). Také, když set() je použita, odebere se jedna kniha.

UPRAVIT :Toto je jeden můj starý odpovědník, ale teprve teď jsem si všiml, že obsahuje chybu, která je opravena přeškrtnutím v posledním odstavci:objekty se stejným hash() nedá True ve srovnání s is . Hashabilita objektů se však používá, pokud je zamýšlíte použít jako prvky sady nebo jako klíče ve slovníku.



  1. Kód entitního rámce je pomalý při použití Include() mnohokrát

  2. Import databáze MySQL z jednoho serveru na druhý

  3. CodeIgniter přepínací ovladač z mysql --> mysqli

  4. com.mysql.jdbc.MysqlDataTruncation:Zkrácení dat:Data jsou příliš dlouhá pro sloupec 'column_name'