Python设置自定义对象的差异

2024-09-30 06:32:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两组自定义对象,它们是从以下字典元组构建的:

tupleOfDicts1 = ({'id': 1, 'name': 'peter', 'last': 'smith'},
                 {'id': 2, 'name': 'peter', 'last': 'smith'},
                 {'id': 3, 'name': 'mark', 'last':'white'},
                 {'id': 4, 'name': 'john', 'last': 'lennon'},)

tupleOfDicts2 = ({'id': 9, 'name': 'peter', 'last': 'smith'},
                 {'id': 8, 'name': 'peter', 'last': 'smith'},)

如您所见,我有相同的元素,除了'id'属性。在

然后我定义以下对象:

^{pr2}$

如您所见,此对象已准备好接收构造函数中的字典。在

现在我定义了一个函数,它从包含字典的元组返回一组结果对象:

def getSetFromTuple(tupleOfDicts):
    myset = set()
    for dictionary in tupleOfDicts:
        myset.add(Result(**dictionary))
    return myset

此时,我创建了两个集合:

mySet1 = getSetFromTuple(tupleOfDicts1)
mySet2 = getSetFromTuple(tupleOfDicts2)

我这样做是因为我想在mySet1上拥有mySet2上没有的所有元素(对于这个比较,我不希望涉及属性'id'):

diff = mySet1 - mySet2

但我没有得到我想要的,在这种情况下,我得到了mySet1的所有元素:

print(len(mySet1 - mySet2))  # 4

我希望mySet1只剩下两个元素,因为它的两个元素在mySet2上(使用相同的name和相同的lastid总是不同的)。在

在我看来,当我在两个集合之间调用-运算符时,这个类将比较元素的哈希值。在这种情况下,4的输出是有意义的。但是:有没有办法做我想做的事?在


Tags: 对象nameid元素字典peterlast元组
1条回答
网友
1楼 · 发布于 2024-09-30 06:32:18

与您的评论相反,我认为id不应该在哈希中。如果两个元素相等,它们的哈希值也必须相等:

def __hash__(self):
  return hash((self.name, self.last))

在内部,hash将值映射到一个bucket。具有不同哈希值的元素可能会在不同的bucket中结束,并且在消除重复(集合)/查询(字典)时避免完全比较。在

也就是说,有一种更简单的方法来获得结果,而不涉及OOP,只处理数据本身:

^{pr2}$

相关问题 更多 >

    热门问题