このオブジェクトを使用していくつかのセット操作を実行しようとしています。オブジェクトドロップキーの交差を設定する
def Group(object):
def __init__(self, name, email, description, skip_if_deleted, membership=None)
self.name = name
self.email = remove_special_characters(email.lower(), bad_chars)
self.description = description
self.action = None
self.skip_if_deleted = skip_if_deleted
if membership is not None:
self.membership = set(membership)
else:
self.membership = set([])
def __hash__(self):
return hash(self.email)
def __eq__(self, other):
return self.email == other.email
私はセットの交差点を行うとき、私は空のと引き換えに、人口の多いキー「会員資格」を落としているように見えることを発見しています。
例:
フェッチ
# Example obj in unpopulated_membership looks like: Group(name, email, description, membership = empty set)
unpopulated_membership = set(get_groups_from_first_source())
メンバーシップ情報を
# Example obj in populated_membershop looks like: Group(name, email, description, membership = populated set)
populated_membership = set(get_groups_from_other_source())
common_groups = populated_membership.intersection(unpopulated_membership)
を返さない第2のソースからのフェッチ時に会員情報を提供していない最初のソースからフェッチ
この時点で、一般的なグループは2つのセットの共通点を示していますが、キーのメンバーシップは現在unpopulated_membership's
値。私がpopulated_membership.intersection()かunpopulated_membership.intersection()を行うかどうかに関わらず、
これはなぜですか?この交差点を実行する際には、どうすればpopulated_membership
にある会員情報を保持できますか?
ありがとうございます!
common_groups = {group for group in populated_membership
if group in unpopulated_membership}
は、私も、あなたのデータを表現する別の方法を選択することをお勧めします:
あなたが保持する 'email'を2つの' Group'オブジェクトのどちらに使っているか気にするならば、 'email'に基づいて' __hash__'と '__eq__'を定義するべきではありません。 – user2357112
2番目の@ user2357112には、どちらが保持されているかを気にする場合は、 'set'を使用しないでください。それは、あなたがデータのマージ操作を捨てるよりももっと似ているように聞こえます。それは、いくつかのカスタムコードが必要になるでしょう。 – jpmc26