sql >> Database >  >> RDS >> Mysql

Verwijder duplicaten in de lijst met objecten met Python

De set(list_of_objects) zal de duplicaten alleen verwijderen als u weet wat een duplicaat is, dat wil zeggen dat u de uniciteit van een object moet definiëren.

Om dat te doen, moet je het object hashbaar maken. U moet beide __hash__ . definiëren en __eq__ methode, hier is hoe:

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

Hoewel u waarschijnlijk alleen __eq__ . hoeft te definiëren methode.

BEWERKEN :Hoe de __eq__ . te implementeren methode:

U moet, zoals ik al zei, de uniciteitsdefinitie van uw object kennen. Stel dat we een boek hebben met de attributen naam auteur en titel waarvan de combinatie uniek is (we kunnen dus veel boeken hebben die Stephen King heeft geschreven en veel boeken met de naam The Shining, maar slechts één boek met de naam The Shining van Stephen King), dan is de implementatie is als volgt:

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

Op dezelfde manier implementeer ik soms de __hash__ methode:

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

U kunt controleren of als u een lijst van 2 boeken met dezelfde auteur en titel maakt, de boekobjecten dezelfde zullen zijn (met is operator) en gelijk (met == exploitant). Ook wanneer set() wordt gebruikt, wordt één boek verwijderd.

BEWERKEN :Dit is een oud antwoord van mij, maar ik merk nu pas dat het de fout bevat die in de laatste alinea is gecorrigeerd met doorhalen:objecten met dezelfde hash() geeft geen True vergeleken met is . Hashability van objecten wordt echter gebruikt als u ze wilt gebruiken als elementen van een set of als sleutels in het woordenboek.



  1. in mysql, bij verwijderen cascade werkt niet

  2. SQLite LIKE

  3. Verbinding maken met Lotus Notes vanuit Java

  4. MySQL om het aantal rijen te krijgen die op een datum vallen voor elke dag van een maand