我想在字典中设置键和值.这是我做的一个例子.
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'
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?我希望能够使用+ =和 - =.当然,如果价值不存在,则+ = 1与= 1相同.也许有更好的解决方案?
谢谢.
Nou*_*him 11
由于d不存在c['a'],当您尝试添加时,您期望采取什么样的行为1?它将首先调用__getitem__,而不是找到密钥,然后返回一个NestedDict不支持就地添加的密钥int.
在旁注中,它看起来好像你正在尝试使用"默认"值实现字典.我会使用collections模块中提供的defaultdict类
from collections import defaultdict
def create_nested_dict():
return defaultdict(create_nested_dict)
c = create_nested_dict()
Run Code Online (Sandbox Code Playgroud)