基于字典内键的嵌套 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>, {})}})}})
但是,在不同级别交换键的名称可能需要一些特殊的外壳,并且会使代码更加混乱...
我试图在基于键值的 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>, {})}})}})
但是,在不同级别交换键的名称可能需要一些特殊的外壳,并且会使代码更加混乱...