順序を維持し、一意の識別子を確保しながら、Python リストから重複オブジェクトを削除するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-27 08:04:31
オリジナル
394 人が閲覧しました

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

Python を使用した重複オブジェクトの削除

概要

カスタム クラスやオブジェクトなどの複雑なオブジェクトのリストを操作する場合複雑なデータ構造では、重複したエントリを削除することが困難になる場合があります。この記事では、元の順序を保持し、オブジェクトが一意の識別子を持つようにしながら、リストから重複オブジェクトを削除するという問題の解決策を説明します。

オブジェクトの一意性の定義

重複を削除するには、何が重複オブジェクトを構成するのかを定義する必要があります。これは通常、2 つのオブジェクトが等しいかどうかを比較する __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>
ログイン後にコピー

このアプローチでは、オブジェクトの同等性が、author_name や title などの属性の単純な比較に基づいていることを前提としています。ブッククラス。比較基準がより複雑な場合は、それに応じて __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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!