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'}