Зачем вам нужна лямбда для гнезда defaultdict?

Я немного смущен тем, почему вам нужна функция лямбда для вложенности defaultdict

Почему ты не можешь так сделать?

test = defaultdict(defaultdict(list)) 

вместо

 test = defaultdict(lambda:defaultdict(float)) 

 test = defaultdict(defaultdict(list)) 

Поскольку defaultdict требует, чтобы вы дали ему то, что можно вызвать для создания ключей для отсутствующих значений. list является таким вызываемым, но defaultdict(list) – нет. Это экземпляр defaultdict , и вы не можете вызвать defaultdict .

lambda – это функция, которая при вызове возвращает значение, которое может быть использовано в словаре, поэтому оно работает.

По сути, defaultdict(list) будет оцениваться до того, как будет defaultdict экземпляр defaultdict , и вы хотите отложить его до тех пор, пока не будет обнаружен недостающий ключ. Вот почему здесь используется вызываемый объект (тип или функция).