你也可以繼承dict
和實施__missing__
:
class missingdict(dict):
def __missing__(self, key):
return 'default' # note, does *not* set self[key]
演示:
>>> d = missingdict()
>>> d['foo']
'default'
>>> d
{}
您可能子defaultdict
過,你會得到廠家的處理中拋出加拷貝和鹹菜支持:
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__
不會撒謊,它的名字。
這很完美。我可能會使用defaultdict路線來獲得副本支持。謝謝! – Chad
我可以爲'd.pop(「unloaded_key」)'設置一個默認值嗎? – lerner
@Lerner:'dict.pop()'接受默認的第二個參數。 'dict.pop()'不會像大多數其他方法那樣查詢'__missing__';只有'dict .__ getitem__'確實(所以'd [missingkey]')。 –