WoJ*_*WoJ 6 python dictionary python-collections
我目前使用defaultdict的Counter唯一指望的不可预知的钥匙几个不可预测值:
from collections import defaultdict, Counter
d = defaultdict(Counter)
d['x']['b'] += 1
d['x']['c'] += 1
print(d)
Run Code Online (Sandbox Code Playgroud)
这给了我预期的结果:
defaultdict(<class 'collections.Counter'>, {'x': Counter({'c': 1, 'b': 1})})
Run Code Online (Sandbox Code Playgroud)
我现在需要扩展其中的值的结构,defaultdict并dict使用两个键来创建它:前一个Counter和一个str:
mystruct = {
'counter': collections.Counter(),
'name': ''
}
Run Code Online (Sandbox Code Playgroud)
是否有可能使用特定的数据结构(如上述),作为default_factory在defaultdict?预期的结果是,对于每个不存在的键,defaultdict将创建一个用上面的结构初始化的新键和值.
您只需将default_factory定义为一个函数,该函数返回您想要默认的字典:
from collections import defaultdict, Counter
d = defaultdict(lambda: {'counter': Counter(), 'name': ''})
d['x']['counter']['b'] += 1
d['x']['counter']['c'] += 1
print(d)
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉lambdas,这与以下内容相同:
def my_factory():
aDict = {'counter': Counter(), 'name':''}
return aDict
d = defaultdict(my_factory)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |