順序を維持しながら Python リストから重複オブジェクトを効率的に削除するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-27 00:22:30
オリジナル
338 人が閲覧しました

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

Python で重複オブジェクトを効率的に処理する

Python では、元の順序を維持しながら重複オブジェクトをリストから削除することが必要な場合があります。この問題は、カスタム オブジェクトのリストがあり、特定の基準に基づいて重複をフィルタリングする場合、またはデータベース内の重複をチェックする場合に発生します。

特定の要件に関して、効果的に使用するには、オブジェクト内で一意性を定義する必要があります。 set(list_of_objects) メソッド。これには、eq メソッドと hash メソッドを実装してオブジェクトをハッシュ可能にすることが含まれます。

eq メソッドはオブジェクトの等価性を定義します。たとえば、author_name 属性と title 属性を持つ Book オブジェクトがあり、author と title の組み合わせが一意である場合、eq メソッドは次のようになります。

<code class="python">def __eq__(self, other):
    return self.author_name == other.author_name and self.title == other.title</code>
ログイン後にコピー

同様に、 hash メソッドは、オブジェクトのハッシュ値を生成します。一般的なアプローチは、キー属性のタプルをハッシュすることです:

<code class="python">def __hash__(self):
    return hash(('title', self.title, 'author_name', self.author_name))</code>
ログイン後にコピー

これらのメソッドを配置すると、Book オブジェクトのリストから重複を削除できるようになります:

<code class="python">books = [Book('title1', 'author1'), Book('title2', 'author2'), Book('title1', 'author1')]
unique_books = list(set(books))</code>
ログイン後にコピー

さらに、データベース内の重複を確認するには、次の方法を使用できます:

<code class="python">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]</code>
ログイン後にコピー

以上が順序を維持しながら Python リストから重複オブジェクトを効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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