sql >> Databasteknik >  >> RDS >> Mysql

Ta bort dubbletter i objektlistan med Python

set(list_of_objects) kommer bara att ta bort dubbletterna om du vet vad en dubblett är, det vill säga du måste definiera en unikhet för ett objekt.

För att göra det måste du göra objektet hashbart. Du måste definiera både __hash__ och __eq__ metod, så här:

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

Men du behöver förmodligen bara definiera __eq__ metod.

REDIGERA :Hur man implementerar __eq__ metod:

Du måste känna till, som jag nämnde, unikhetsdefinitionen för ditt objekt. Förutsatt att vi har en bok med attributen author_name och title som deras kombination är unik, (så att vi kan ha många böcker som Stephen King har skrivit, och många böcker som heter The Shining, men bara en bok som heter The Shining av Stephen King), då implementeringen är som följer:

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

På samma sätt är det så här jag ibland implementerar __hash__ metod:

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

Du kan kontrollera att om du skapar en lista med 2 böcker med samma författare och titel, kommer bokobjekten att vara desamma (med is operatör) och lika (med == operatör). Även när set() används, tar den bort en bok.

REDIGERA :Det här är ett gammalt svar av mig, men jag märker först nu att det har felet som korrigeras med genomstrykning i sista stycket:objekt med samma hash() ger inte True jämfört med is . Hashbarhet för objekt används dock om du tänker använda dem som element i uppsättningen eller som nycklar i ordboken.



  1. fel räkning i fråga

  2. Räkna antalet på varandra följande besök

  3. Infoga NULL-värdet i kolumnen INT

  4. Fel:Din PHP-installation verkar sakna MySQL-tillägget som krävs av WordPress