"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como faço para remover com eficiência objetos duplicados de uma lista Python enquanto preservo a ordem?

Como faço para remover com eficiência objetos duplicados de uma lista Python enquanto preservo a ordem?

Publicado em 2024-11-03
Navegar:382

How Do I Efficiently Remove Duplicate Objects from a Python List While Preserving Order?

Tratamento eficiente de objetos duplicados com Python

Em Python, pode ser necessário remover objetos duplicados de uma lista enquanto mantém a ordem original. Esse problema surge quando você tem uma lista de objetos personalizados e deseja filtrar duplicatas com base em determinados critérios ou verificar se há duplicatas em um banco de dados.

Em relação aos seus requisitos específicos, você precisa definir a exclusividade em seus objetos para usá-los com eficiência. o método set(list_of_objects). Isso envolve tornar seus objetos hasháveis ​​implementando os métodos eq e hash.

O método eq define a igualdade dos objetos. Por exemplo, se você tiver objetos Livro com atributos autor_nome e título, onde a combinação de autor e título é única, o método eq pode ter esta aparência:

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

Da mesma forma, o método hash gera um valor hash para o objeto. Uma abordagem comum é fazer hash de uma tupla de atributos-chave:

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

Com esses métodos implementados, agora você pode remover duplicatas de uma lista de objetos Livro:

books = [Book('title1', 'author1'), Book('title2', 'author2'), Book('title1', 'author1')]
unique_books = list(set(books))

Além disso, para verificar se há duplicatas em um banco de dados, você pode usar a seguinte abordagem:

import sqlalchemy

session = sqlalchemy.orm.sessionmaker()()
records = session.query(YourModel).all()
existing_titles = set([record.title for record in records])
unique_objects = [obj for obj in objects if obj.title not in existing_titles]
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3