gpt4 book ai didi

python - 从集合python中获取项目

转载 作者:行者123 更新时间:2023-12-05 01:03:24 26 4
gpt4 key购买 nike

我有一个集合,其中包含我定义了 __eq____hash__ 函数的对象。

我希望能够检查具有相同哈希的对象是否在集合中,以及它是否在集合中以从集合中返回对象,因为我需要对该对象的引用。

class SetObject():
def __init__(
self,
a: int,
b: int,
c: int
):
self.a = a
self.b = b
self.c = c

def __repr__(self):
return f"SetObject ({self.a} {self.b} {self.c}) (id: {id(self)}"

def __eq__(self, other):
return isinstance(other, SetObject) \
and self.__hash__() == other.__hash__()

def __hash__(self):
# Hash only depends on a, b
return hash(
(self.a,self.b)
)

x = SetObject(1,2,3)
y = SetObject(4,5,6)

object_set = set([x,y])

print(f"{object_set=}")

z = SetObject(1,2,7)
print(f"{z=}")
if z in object_set:
print("Is in set")
# Get the object in set which is equal to z
for element in object_set:
if element == z:
print(element)
z = element

print(f"{z=}")

最佳答案

不要使用集合,而是使用键和值是相同元素的字典。然后你可以看看使用值作为键并返回元素。

x = SetObject(1,2,3)
y = SetObject(4,5,6)

object_set = dict([(x, x),(y, y)])

print(f"{object_set=}")

z = SetObject(1,2,7)
print(f"{z=}")
if z in object_set:
print("Is in set")
z = object_set[z]

print(f"{z=}")

如果你想简化这一点,你可以定义一个 dict 的子类,它会自动使值与键相同。

关于python - 从集合python中获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74322894/

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