sql >> Database teknologi >  >> RDS >> Mysql

Fjern dubletter på listen over objekter med Python

set(list_of_objects) vil kun fjerne dubletterne, hvis du ved, hvad en duplikat er, dvs. du skal definere en unikhed af et objekt.

For at gøre det skal du gøre objektet hashbart. Du skal definere både __hash__ og __eq__ metode, her er hvordan:

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

Selvom du sandsynligvis kun behøver at definere __eq__ metode.

REDIGER :Sådan implementeres __eq__ metode:

Du skal, som jeg nævnte, kende unikhedsdefinitionen af ​​dit objekt. Antaget, at vi har en bog med attributterne forfatternavn og titel, hvor deres kombination er unik, (så vi kan have mange bøger, som Stephen King har forfattet, og mange bøger med navnet The Shining, men kun én bog med navnet The Shining af Stephen King), så implementeringen er som følger:

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

På samme måde er det sådan, jeg nogle gange implementerer __hash__ metode:

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

Du kan kontrollere, at hvis du opretter en liste med 2 bøger med samme forfatter og titel, vil bogobjekterne være de samme (med is operatør) og lig (med == operatør). Også når set() er brugt, vil den fjerne én bog.

REDIGER :Dette er en af ​​mine gamle svar, men jeg bemærker først nu, at den har fejlen, som er rettet med gennemstregning i sidste afsnit:objekter med samme hash() giver ikke True sammenlignet med is . Hashability af objekter bruges dog, hvis du har til hensigt at bruge dem som elementer af sæt eller som nøgler i ordbog.



  1. Grundlæggende SQL-kommandoer:Sådan skriver du simple forespørgsler med eksempler

  2. Der skelnes mellem store og små bogstaver RLIKE

  3. mysql lagret procedure fejl (1172, 'Resultat bestod af mere end én række')

  4. SSMS version 18 – ingen databasediagrammer