set(list_of_objects)
重複が何であるかがわかっている場合、つまり、オブジェクトの一意性を定義する必要がある場合にのみ、重複が削除されます。
そのためには、オブジェクトをハッシュ可能にする必要があります。両方の__hash__
を定義する必要があります および__eq__
メソッド、方法は次のとおりです:
http://docs.python.org/glossary.html#term-hashable
ただし、おそらく__eq__
を定義するだけで済みます。 メソッド。
編集 :__eq__
を実装する方法 方法:
前述したように、オブジェクトの一意性の定義を知る必要があります。組み合わせが一意である属性author_nameとtitleを持つBookがあるとします(したがって、Stephen Kingが作成した多くの本と、The Shiningという名前の本がたくさんありますが、StephenKingによるTheShiningという名前の本は1冊だけです)。は次のとおりです:
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))
同じ著者とタイトルの2冊の本のリストを作成すると、本のオブジェクトが同じになることを確認できます( 等しい(is
演算子)および==
オペレーター)。また、set()
の場合 を使用すると、1冊の本が削除されます。
編集 :これは私の古い答えの1つですが、最後の段落の取り消し線で修正されたエラーがあることに気づきました:同じhash()
を持つオブジェクト True
を与えません is
と比較した場合 。ただし、オブジェクトのハッシュ可能性は、セットの要素として、または辞書のキーとして使用する場合に使用されます。