Python中的无限嵌套字典

有没有人知道Python中有无限嵌套字典的标准类?

我发现自己重复这种模式:

d = defaultdict(lambda: defaultdict(lambda: defaultdict(int)))
d['abc']['def']['xyz'] += 1

如果我想添加“另一个层”(例如d [‘abc’] [‘def’] [‘xyz’] [‘wrt’]),我必须定义另一个嵌套的defaultDicts.

为了概括这种模式,我已经写了一个简单的类来覆盖__getitem__来自动创建下一个嵌套字典.

例如

d = InfiniteDict(('count',0),('total',0))
d['abc']['def']['xyz'].count += 0.24
d['abc']['def']['xyz'].total += 1
d['abc']['def']['xyz']['wrt'].count += 0.143
d['abc']['def']['xyz']['wrt'].total += 1

但是,有没有人知道这个想法的预先实现?我试过谷歌,但我不知道这将被称为什么.

最佳答案
你可以从defaultdict派生出你想要的行为:

class InfiniteDict(defaultdict):
   def __init__(self):
      defaultdict.__init__(self, self.__class__)

class Counters(InfiniteDict):
   def __init__(self):
      InfiniteDict.__init__(self)                                               
      self.count = 0
      self.total = 0

   def show(self):
      print "%i out of %i" % (self.count, self.total)

此类的用法将如下所示:

>>> d = Counters()
>>> d[1][2][3].total = 5
>>> d[1][2][3].show()
0 out of 5
>>> d[5].show()
0 out of 0

转载注明原文:Python中的无限嵌套字典 - 代码日志