gpt4 book ai didi

Python的方法如Java中的 'equals'

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:54 27 4
gpt4 key购买 nike

我怎样才能使 set 的对象相等性取决于我设置的自定义属性?就像 Java 的 equals 方法。

关键是我想要一个包含元组 (x,y) 的集合。当我尝试将 (x,y) 元组放入集合中时,结果将取决于 x

set.add((x,y))
- OK
set.add((x,z))
- Can't add because there is already a touple which has x as a first value.

最佳答案

为什么不使用 dict 而不是 tupleset:

d = {}
d[x] = y
d[x] = z

虽然这会用 z 覆盖值 y,但它确保您一次只有一个值。

如果你不希望重写成为可能,你可以子类化 dict 来阻止它:

class HalfFrozenDict(dict):  # Name is a subject to change

def __setitem__(self, key, value):
if key in self:
raise KeyError("Key '{}' already exists!".format(key))
super().__setitem__(key, value)

def update(self, other):
other = {key: other[key] for key in other if key not in self}
super().update(other)

目前,如果您尝试重新设置一个项目,它会引发错误:

>>> d = HalfFrozenDict()
>>> d[0] = 1
>>> d[0] = 2
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
d[0] = 2
File "<pyshell#1>", line 5, in __setitem__
raise KeyError("Key: '{}' already exists!".format(key))
KeyError: "Key '0' already exists!"

此外,调用 d.update(other) 只会忽略 other 字典中的重复键。

这两种行为都可能发生变化:您是否愿意在“无效”update() 调用时引发错误?您是否愿意忽略项目的重新设置(我认为在这种情况下错误更好)?

关于Python的方法如Java中的 'equals',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com