基于字典内键的嵌套 defaultdict

nested defaultdict based on a key inside dictionary

我试图在基于键值的 defaultdict 中创建一个 defaultdict。我的想法在这里可能完全错误,但这是基本 defaultdict 的代码;

def record():
    return {
        'count': 0,
        'key1': Counter(),      
    }

1_record = defaultdict(record)

但是如果我想像这样添加一个键作为 defaultdict 怎么办;

def record():
    return {
        'count': 0,
        'key1': Counter(),
        'key2': {
            'count': 0,
            'nested_key1': Counter()

    }
}

在上面我怎样才能使 'key2' 成为 defaultdict?这甚至有可能还是我以错误的方式解决问题?

你绝对可以有一个 "recursive" defaultdict:

>>> from collections import defaultdict
>>> def record():
...   return {
...     'key': defaultdict(record)
...   }
... 
>>> d = defaultdict(record)
>>> 
>>> d['foo']
{'key': defaultdict(<function record at 0x10b396f50>, {})}
>>> d['foo']['key']['bar']
{'key': defaultdict(<function record at 0x10b396f50>, {})}
>>> d
defaultdict(<function record at 0x10b396f50>, {'foo': {'key': defaultdict(<function record at 0x10b396f50>, {'bar': {'key': defaultdict(<function record at 0x10b396f50>, {})}})}})

但是,在不同级别交换键的名称可能需要一些特殊的外壳,并且会使代码更加混乱...