Если вы хотите создать dict со специальным правилом для обработки ключей, которые на самом деле не хранятся в хэш-таблице dict, вы хотите создать подкласс dict
, который реализует __missing__
:
Вызывается dict.__getitem__()
для реализации self[key]
для dict
подклассов, когда ключ отсутствует в словаре.
Как это:
class SpecialDict(dict):
def __missing__(self, key):
if isinstance(key, tuple) and len(key) == 2 and key[1] == 0:
return [0, key]
raise KeyError(key)
Я не очень понимаю, как должен работать ваш пример, поэтому вот другой пример, чтобы продемонстрировать это:
>>> d = SpecialDict({(1, 1): [2, 3], (1, 2): [5, 4]})
>>> d[1, 1]
[2, 3]
>>> d[2, 2]
KeyError: (2, 2)
>>> d[20, 0]
[0, 20]
Если вы сохраните значение для ключа (n, 0)
, он не будет вызывать __missing__
для этого ключа, что позволит вам переопределить один (n, 0)
, оставляя остальные с их специальным правилом:
>>> d[42, 0] = [23, 23]
>>> d[42, 0]
[23, 23]
>>> d[23, 0]
[0, 23]