【问题标题】:Nested dictionary with defaults具有默认值的嵌套字典
【发布时间】:2018-04-05 12:42:52
【问题描述】:

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

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

【问题讨论】:

  • 根据您的具体操作,您可能还可以使用元组键执行单个 defaultdict(或 Counter):mydict = defaultdict(int); mydict[(x, y, z)] += 1

标签: python dictionary counter defaultdict


【解决方案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 是为增加整数的特定目的而创建的,这将是我更喜欢的方法。

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2016-01-30
    • 2016-01-28
    • 2019-11-27
    相关资源
    最近更新 更多