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 サイトの他の関連記事を参照してください。