4

为了优化一些代码,我使用以下内容:

a = defaultdict(lambda: len(a))
a[0] = 0
a[1] = 1
a[7] = 2
...

现在我的问题是我需要一个嵌套的默认字典,即

b = defaultdict(lambda: defaultdict(lambda: len(b[?]))
b[0][0] = 0
b[0][1] = 1
b[1][0] = 0
b[1][1] = 1
...

提前致谢...

4

2 回答 2

4
def enumdict():
    a = defaultdict(lambda : len(a))
    return a

b = defaultdict(enumdict)
于 2012-05-18T10:21:44.550 回答
2

如果你想让它成为一个类:

class CountDict(defaultdict):
    def __init__(self):
        defaultdict.__init__(self, self.default_factory)

    def default_factory(self):
         sub = defaultdict()
         sub.default_factory = sub.__len__
         return sub

您通常不能在 lambda 中执行此操作,因为您需要将子默认 dict 分配给一个变量,以便之后能够获取其 len,这在 lambda 中是不可能的。@Duncan 想出了一个解决方法,使用列表理解来充当分配。干得好:)但不要使用它.. :D

于 2012-05-18T11:55:05.447 回答