我想要实现的编程模式是:创建一个对象,如果它没有从集合中删除 将其添加到集合中,否则更新集合中的等效对象。
class PersonStats(object):
def __init__(self, i):
super(PersonStats, self).__init__()
self.id = i
self.stats = 0
def update_stats(self):
self.stats += 1
def __key(self):
return self.id
def __eq__(self, y):
return self.__key() == y.__key()
def __hash__(self):
return hash(self.__key())
s = set_like_collection()
special_person = PersonStats(22222)
r = s.find(special_person)
if r is not None:
r.update_stats()
else:
s.add(r)
我很惊讶地发现Python的集合没有find函数。 (需要迭代集合以找到她想要的对象) 我知道我可以使用defaultdict但是我讨厌打破PersonStats的封装,也就是说,在上面的例子中,使用person的id PersonStats类的一面。
所以我的问题是你知道Python中的数据结构会让我有一个unordered_set并让我在恒定时间内找到它吗?
也想知道我是否想错了。
此外,如果您知道为什么Python的集合没有查找功能。
答案 0 :(得分:1)
您可能想要使用有序集:
https://pypi.python.org/pypi/ordered-set
.index(...)
功能提供了'位置'在集合中。
但是,您可能希望捕获异常。