Python defaultdict, который не вставляет отсутствующие значения

Таким образом, в документации defaultdict упоминается, что если элемент отсутствует, значение, возвращаемое default_factory ", вставляется в словарь для ключ и вернулся". Это большой раз в то время, но то, что я на самом деле хочу в этом случае, - это вернуть значение, но не вставлено в defaultdict.

Я подумал, что могу, возможно, подклассировать defaultdict и переопределить... Думаю, __missing__? Не уверен. Какой лучший способ сделать это?

Спасибо заранее.

Ответ 1

Вы можете подклассом dict и реализовать __missing__:

class missingdict(dict):
    def __missing__(self, key):
        return 'default'  # note, does *not* set self[key]

Демо:

>>> d = missingdict()
>>> d['foo']
'default'
>>> d
{}

Вы также можете подклассифицировать defaultdict, вы получите factory обработку плюс поддержку копирования и рассола, брошенную в:

from collections import defaultdict

class missingdict(defaultdict):
    def __missing__(self, key):
        return self.default_factory() 

Демо:

>>> from collections import defaultdict
>>> class missingdict(defaultdict):
...     def __missing__(self, key):
...         return self.default_factory() 
... 
>>> d = missingdict(list)
>>> d['foo']
[]
>>> d
defaultdict(<type 'list'>, {})

но, как вы можете видеть, __repr__ не относится к его имени.