python - python中的嵌套无限字典

标签 python dictionary

我想在字典中设置键和值。这是我所做的一个例子。

class NestedDict(dict):
    def __getitem__(self, key):
        if key in self: return self.get(key)
        return self.setdefault(key, NestedDict())

>>> c = NestedDict()
>>> c
{}
>>> c['a']['b'] = 'test'
>>> c['a']['c'] = 2
>>> c
{'a': {'c': 2, 'b': 'test'}}
>>> c['a']['c'] += 1
>>> c
{'a': {'c': 3, 'b': 'test'}}
>>> c['a']['d'] += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +=: 'NestedDict' and 'int'

有什么办法解决这个问题吗?我希望能够使用 += 和 -=。当然,如果值不存在,则 += 1 与 = 1 相同。也许有更好的解决方案?

谢谢。

最佳答案

由于 dc['a'] 中不存在,当您尝试添加 1 时,您期望什么样的行为到吗?它会先调用__getitem__,没有找到key然后返回一个NestedDict,它不支持与int的就地加法。

旁注,在我看来,您似乎正在尝试实现具有“默认”值的字典。我会像这样使用集合模块中可用的 defaultdict 类

from collections import defaultdict

def create_nested_dict():
   return defaultdict(create_nested_dict)

c = create_nested_dict()

关于python - python中的嵌套无限字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783983/

相关文章:

Python 模板,检查迭代的变量值类型

python - 无法在浏览器上使用 Docker compose 运行 Django 应用程序

python - 将 numpy 数组放入多处理队列的困难

javascript - 从嵌套数据结构创建自定义对象数组

python - 仅添加到是否满足条件

c++ - 构造函数错误 : error: expected ‘,’ or ‘...’ before numeric constant

java - 使用 JWNL 与 WordNet 进行词干分析 - 无法安装词典

python - 在 python xarray netcdf4 中创建输出变量并复制属性

python - DataFrame 访问字典中列表中的嵌套键

java - 为什么这会返回 boolean 值而不是长值?