Python defaultdict不插入缺失值

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__它的名字确实存在.

  • @Lerner:没有.只需创建自己的; 你已经在继承`dict`,所以只需添加`def pop(self,*args):try:return super().pop(*args)除了KeyError:return self .__ missing __()`.如果`__missing__`首先在字典中设置键,则根据需要进行调整. (2认同)