あなたは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()'はデフォルトの第2引数をとります。 'dict.pop()'はほとんどの他のメソッドと同じように '__missing__'を参照しません。 'dict .__ getitem__'だけが行います(' d [missingkey] ')。 –