python 数据结构(类似设置)在添加重复项时抛出异常

Van*_*ano 2 python data-structures

我正在寻找一种在添加重复元素时会引发异常的数据结构。

我发现的最接近的是collections.Counter

>>> from collections import Counter as counter
>>> c = counter()
>>> c.update("A")
>>> c.update("A")
>>> c
Counter({'A': 2})
Run Code Online (Sandbox Code Playgroud)

我稍后可以查询。

有没有办法直接实现我正在寻找的东西?

Jam*_*mes 5

您想要一个计数器还是只是像 一样工作set但会引发错误的东西?如果是后者,您可以子类化set并重写该add方法。

class MySet(set):
    def add(self, x):
        if x in self:
            raise KeyError(f'Value already exists')
        super().add(x)

    def update(self, x):
        return self.__ior__(x)

    def __ior__(self, x):
        if any(xx in self for xx in x):
            raise KeyError(f'Value already exists')
        return super().__ior__(x)


s = MySet([1,2,3])
s
# returns:
{1, 2, 3}

s.add(4)
s
# returns:
{1, 2, 3, 4}

# trying to add an existing values raises an error.
s.add(4)
# raises
KeyError: 'Value already exists'
Run Code Online (Sandbox Code Playgroud)

编辑:添加了额外的方法

  • 可能想要类似地重写`update()`和`__ior__`(`|=`的神奇方法) (2认同)
  • 好的,添加了额外的方法 (2认同)