"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo elimino eficientemente objetos duplicados de una lista de Python manteniendo el orden?

¿Cómo elimino eficientemente objetos duplicados de una lista de Python manteniendo el orden?

Publicado el 2024-11-03
Navegar:841

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

Manejo eficiente de objetos duplicados con Python

En Python, puede ser necesario eliminar objetos duplicados de una lista manteniendo el orden original. Este problema surge cuando tiene una lista de objetos personalizados y desea filtrar duplicados según ciertos criterios o verificar si hay duplicados en una base de datos.

Con respecto a sus requisitos específicos, debe definir la unicidad dentro de sus objetos para usarlos de manera efectiva. el método set(list_of_objects). Esto implica hacer que sus objetos sean hash implementando los métodos eq y hash.

El método eq define la igualdad de objetos. Por ejemplo, si tiene objetos Libro con atributos nombre_autor y título, donde la combinación de autor y título es única, el método eq podría verse así:

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

De manera similar, el método hash genera un valor hash para el objeto. Un enfoque común es aplicar hash a una tupla de atributos clave:

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

Con estos métodos implementados, ahora puedes eliminar duplicados de una lista de objetos Libro:

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

Además, para comprobar si hay duplicados en una base de datos, puede utilizar el siguiente enfoque:

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]
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3