为了优化一些代码,我使用以下内容:
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
...
提前致谢...
为了优化一些代码,我使用以下内容:
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
...
提前致谢...
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 中执行此操作,因为您需要将子默认 dict 分配给一个变量,以便之后能够获取其 len,这在 lambda 中是不可能的。@Duncan 想出了一个解决方法,使用列表理解来充当分配。干得好:)但不要使用它.. :D