如果缺少,则创建Python集合,如果现有

时间:2017-03-08 12:55:06

标签: python data-structures

我想要实现的编程模式是:创建一个对象,如果它没有从集合中删除 将其添加到集合中,否则更新集合中的等效对象。

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的集合没有查找功能。

1 个答案:

答案 0 :(得分:1)

您可能想要使用有序集:

https://pypi.python.org/pypi/ordered-set

.index(...)功能提供了'位置'在集合中。 但是,您可能希望捕获异常。

相关问题