Python,双自动枚举默认



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

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

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

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

提前感谢...

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

如果你想把它变成一个类:

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 中执行此操作,因为您需要将子默认字典分配给变量以便之后能够获得其 len,这在 lambda 中是不可能的。 @Duncan想出了一个使用列表推导来充当分配的解决方法。干得好:)但不使用它..:D

最新更新