순서를 유지하고 고유 식별자를 보장하면서 Python 목록에서 중복 개체를 제거하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-10-27 08:04:31
원래의
494명이 탐색했습니다.

 How can I remove duplicate objects from a Python list while preserving order and ensuring unique identifiers?

Python으로 중복 개체 제거

소개

사용자 정의 클래스 또는 개체와 같은 복잡한 개체 목록으로 작업하는 경우 복잡한 데이터 구조에서는 중복 항목을 제거하는 것이 어려울 수 있습니다. 이 문서에서는 원래 순서를 유지하고 개체에 고유 식별자가 있는지 확인하면서 목록에서 중복 개체를 제거하는 문제에 대한 솔루션을 제공합니다.

객체 고유성 정의

중복을 제거하려면, 중복 객체를 구성하는 것이 무엇인지 정의해야 합니다. 이는 일반적으로 두 개체가 같은지 비교하는 __eq__ 메서드를 구현하여 달성됩니다. 예를 들어,author_name 및 title 속성이 있는 Book 클래스가 있는 경우 동등성을 다음과 같이 정의할 수 있습니다.

<code class="python">def __eq__(self, other):
    return self.author_name == other.author_name and self.title == other.title</code>
로그인 후 복사

세트를 사용하여 중복 제거

__eq__ 메소드가 정의되면 set() 함수를 사용하여 목록에서 중복된 객체를 제거할 수 있습니다. set() 함수는 반복 가능한 항목을 허용하고 고유한 요소가 포함된 새 집합을 반환합니다. 객체의 원래 순서를 유지하기 위해 세트를 다시 목록으로 변환할 수 있습니다.

<code class="python"># Create a list of Book objects
books = [
    Book("Stephen King", "The Shining"),
    Book("J.R.R. Tolkien", "The Hobbit"),
    Book("Stephen King", "The Shining"),
]

# Remove duplicates using a set
unique_books = list(set(books))</code>
로그인 후 복사

이 접근 방식은 객체 동등성이 작성자_이름 및 제목과 같은 속성의 간단한 비교를 기반으로 한다고 가정합니다. 도서 수업. 비교 기준이 더 복잡하다면 그에 따라 __eq__ 메서드를 사용자 정의해야 합니다.

데이터베이스에 대한 중복 확인

데이터베이스에 대한 중복을 확인하려면, 비슷한 전략을 사용할 수 있습니다. 먼저, BookEntry 데이터베이스 항목 모델이 있다고 가정하고 객체를 데이터베이스 레코드와 비교하는 함수를 만듭니다.

<code class="python">def compare_to_entry(book, entry):
    return book.author_name == entry.author_name and book.title == entry.title</code>
로그인 후 복사

그런 다음 객체 목록을 반복하고 루프를 사용하여 중복 항목을 제거할 수 있습니다.

<code class="python">for book in books:
    if any(compare_to_entry(book, entry) for entry in BookEntry.objects.all()):
        books.remove(book)</code>
로그인 후 복사

결론

__eq__ 메소드를 구현하고 set() 함수를 사용하면 원래 순서를 유지하면서 목록에서 중복된 개체를 효과적으로 제거할 수 있습니다. 데이터베이스와 같은 외부 데이터 소스와의 비교와 관련된 보다 복잡한 중복 제거 시나리오의 경우 맞춤형 비교 기능을 사용하고 목록을 반복하여 중복 개체를 식별하고 제거할 수 있습니다.

위 내용은 순서를 유지하고 고유 식별자를 보장하면서 Python 목록에서 중복 개체를 제거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿