改变dict类型,新建一个不接受重复值的字典
改变dict类型,新建一个不接受重复值的字典

改变dict类型,新建一个不接受重复值的字典

class DistinctError(ValueError):
    """如果向distinctdict添加重复值,则引发这个错误。"""

class distinctdict(dict):
    """不接受重复值的字典"""
    def __setitem__(self, key, value):
        if value in self.values():
            if (
                    (key in self and self[key] != value) or
                key not in self
            ):
                raise DistinctError(
                    "This value already exists for different key"
                )
        super().__setitem__(key, value)

运行结果:

In [75]: my = distinctdict()

In [76]: my['key'] = 'value'

In [77]: my['other_key'] = 'value'
Traceback (most recent call last):

  File "C:\Users\Administrator\AppData\Local\Temp/ipykernel_420/1151056366.py", line 1, in <module>
    my['other_key'] = 'value'

  File "C:\Users\Administrator\AppData\Local\Temp/ipykernel_420/3560190974.py", line 13, in __setitem__
    "This value already exists for different key"

DistinctError: This value already exists for different key

In [78]: my['other_key'] = 'value2'

In [79]: my
Out[79]: {'key': 'value', 'other_key': 'value2'}

发表回复

您的电子邮箱地址不会被公开。