«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно удалить повторяющиеся объекты из списка Python, сохраняя при этом порядок?

Как эффективно удалить повторяющиеся объекты из списка Python, сохраняя при этом порядок?

Опубликовано 3 ноября 2024 г.
Просматривать:867

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

Эффективная обработка повторяющихся объектов с помощью Python

В Python может возникнуть необходимость удалить повторяющиеся объекты из списка, сохраняя исходный порядок. Эта проблема возникает, когда у вас есть список пользовательских объектов и вы хотите фильтровать дубликаты на основе определенных критериев или проверять наличие дубликатов в базе данных.

Что касается ваших конкретных требований, вам необходимо определить уникальность ваших объектов для эффективного использования. метод set(list_of_objects). Это предполагает создание хэшируемых объектов путем реализации методов eq и hash.

Метод eq определяет равенство объектов. Например, если у вас есть объекты Book с атрибутамиauthor_name и title, где комбинация автора и заголовка уникальна, метод eq может выглядеть следующим образом:

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

Аналогично, метод hash генерирует хэш-значение для объекта. Распространенный подход — хешировать кортеж ключевых атрибутов:

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

С помощью этих методов теперь вы можете удалять дубликаты из списка объектов книги:

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

Кроме того, для проверки дубликатов в базе данных можно использовать следующий подход:

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]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3