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]
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