「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 順序を維持しながら Python リストから重複オブジェクトを効率的に削除するにはどうすればよいですか?

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

2024 年 11 月 3 日に公開
ブラウズ:349

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 メソッドは次のようになります。

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))

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

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