Учитывая, как вернуть n-вложенный defaultdict? - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу написать функцию, которая будет возвращать вложенный defaultdict, в зависимости от значения ввода n.

Для n = 1 он должен возвращать defaultdict(int).

Для n= 3, он должен вернуть defaultdict(lambda: defaultdict(lambda: defaultdict(int))).

Моя лучшая попытка заключается в следующем:

def get_nested_defaultdict(n: int):
    bottom_dict = defaultdict(int)
    nested_dict = defaultdict
    for i in range(n):
        nested_dict = nested_dict(lambda: bottom_dict)
    return nested_dict

Но на 2-й итерации это не получается:

TypeError: 'collections.defaultdict' object is not callable

1 Ответ

0 голосов
/ 20 февраля 2019

А как же:

from collections import defaultdict


def defaultdict_gen(n: int):
  if n < 1:
    raise ValueError()
  if n == 1:
    return defaultdict(int)
  return defaultdict(lambda: defaultdict_gen(n - 1))


if __name__ == '__main__':
  d = defaultdict_gen(2)
  print(d)
  print(d[0][0])
...