sql >> データベース >  >> RDS >> Mysql

Pythonでオブジェクトのリストの重複を削除する

    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と比較した場合 。ただし、オブジェクトのハッシュ可能性は、セットの要素として、または辞書のキーとして使用する場合に使用されます。



    1. SQLでデータベースを作成するにはどうすればよいですか?

    2. 日付形式(DBまたは出力)をdd / mm/yyyyに変更します-PHPMySQL

    3. どうすれば大量のmysqlテーブルを整理できますか?

    4. SQLiteで重複する行を削除する2つの方法