python - 带默认值的嵌套字典

标签 python dictionary counter defaultdict

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

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

最佳答案

是的,您可以使用 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 是为递增整数的特定目的而创建的,这将是我更喜欢的方法。

关于python - 带默认值的嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672708/

相关文章:

python - 文件不在客户端

python - 遍历 pandas 中的行并计算唯一的主题标签

jQuery - 达到限制时禁用剩余的复选框

python - 使用ctypes将数组从Python传递到C++,无法完全处理它

python - 我可以用Python制作一个GUI而不需要任何额外的软件吗?

python - 读取 Wireshark 转储文件中的数据包时间

ios - 按键名在字典数组中搜索

java - 为什么 Map.getOrDefault() 会警告 NullPointerException?

c++ - 对象在构造函数之后不存在?

javascript - 意外的 useInterval 和 useEffect 行为