Словарь Python с памятью ключей, к которым обращались?

Я хотел бы создать структуру данных, которая ведет себя как словарь с одной дополнительной функцией, которая заключается в отслеживании того, какие ключи были "использованы". Обратите внимание, что я не могу просто вытолкнуть значения, поскольку они используются повторно.

Структура должна поддерживать эти три случая, т. е. помечать ключ как использованный при доступе к нему как:

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, есть ли лучший как добиться этого результата?

9
задан badzil 25 May 2012 в 16:52
поделиться