Cha*_*had 15 python collections defaultdict
因此,defaultdict文档提到,如果缺少某个项,则default_factory" 返回的值将插入到密钥的字典中,并返回".这在大多数时候都很棒,但在这种情况下我真正想要的是返回值但不插入defaultdict.
我想我可能是子类defaultdict并覆盖......我猜__missing__?不确定.最好的方法是什么?
提前致谢.
Mar*_*ers 15
您可以继承dict并实现__missing__:
class missingdict(dict):
def __missing__(self, key):
return 'default' # note, does *not* set self[key]
Run Code Online (Sandbox Code Playgroud)
演示:
>>> d = missingdict()
>>> d['foo']
'default'
>>> d
{}
Run Code Online (Sandbox Code Playgroud)
您也可以进行子类化defaultdict,您将获得工厂处理以及抛出的复制和pickle支持:
from collections import defaultdict
class missingdict(defaultdict):
def __missing__(self, key):
return self.default_factory()
Run Code Online (Sandbox Code Playgroud)
演示:
>>> from collections import defaultdict
>>> class missingdict(defaultdict):
... def __missing__(self, key):
... return self.default_factory()
...
>>> d = missingdict(list)
>>> d['foo']
[]
>>> d
defaultdict(<type 'list'>, {})
Run Code Online (Sandbox Code Playgroud)
但是,正如你所看到的,__repr__它的名字确实存在.
| 归档时间: |
|
| 查看次数: |
2271 次 |
| 最近记录: |