4

いくつかのコードを最適化するために、私は以下を使用しています:

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

今私の問題は、ネストされたdefaultdictが必要になることです。

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

子のデフォルト dict を変数に割り当てて、後でその len を取得できるようにする必要があるため、ラムダでは通常これを行うことはできません。これはラムダでは不可能です。@Duncan は、リスト内包表記を使用して代入のように振る舞う回避策を考え出しました。よくやった:)しかし、それを使用しないでください..:D

于 2012-05-18T11:55:05.447 に答える