我想在字典中设置键和值。这是我所做的一个例子。
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 相同。也许有更好的解决方案?
谢谢。
最佳答案
由于 d
在 c['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/