带默认值的嵌套字典

Nested dictionary with defaults

有没有办法制作一个嵌套字典,这样我可以说 mydict[x][y][z] += 1,其中 mydict[x][y][z] 以前不存在,默认为 0(递增后为 1)?

我调查了一个类似问题的答案,您可以在其中使用 collections class (Declaring a multi dimensional dictionary in python) 中的 defaultdictmydict[x][y][z] = 1,但是这不允许您假定默认值然后递增。

是的,您可以使用 collections 模块来做到这一点:

from collections import defaultdict, Counter

d = defaultdict(lambda: defaultdict(lambda: Counter()))

d['A']['B']['C'] += 1

# defaultdict(<function __main__.<lambda>>,
#             {'A': defaultdict(<function __main__.<lambda>.<locals>.<lambda>>,
#                          {'B': Counter({'C': 1})})})

请注意,这也可以通过仅使用嵌套 defaultdict:

d = defaultdict(lambda: defaultdict(lambda: defaultdict(int)))

但是,鉴于 Counter 是为递增整数的特定目的而创建的,这将是我更喜欢的方法。