Я хотел бы создать структуру данных, которая ведет себя как словарь с одной дополнительной функцией, которая заключается в отслеживании того, какие ключи были "использованы". Обратите внимание, что я не могу просто вытолкнуть значения, поскольку они используются повторно.
Структура должна поддерживать эти три случая, т. е. помечать ключ как использованный при доступе к нему как:
if key in d:
...
d[key]
d.get(key)
Вот что я написал:
class DictWithMemory(dict):
def __init__(self, *args, **kwargs):
self.memory = set()
return super(DictWithMemory, self).__init__(*args, **kwargs)
def __getitem__(self, key):
self.memory.add(key)
return super(DictWithMemory, self).__getitem__(key)
def __contains__(self, key):
self.memory.add(key)
return super(DictWithMemory, self).__contains__(key)
def get(self, key, d=None):
self.memory.add(key)
return super(DictWithMemory, self).get(key, d)
def unused_keys(self):
"""
Returns the list of unused keys.
"""
return set(self.keys()).difference(self.memory)
Поскольку я не очень знаком с внутренним устройством dict, есть ли лучший как добиться этого результата?