2017-01-01 3 views
0

Я пытаюсь defaultdict в python. код выглядит следующим образом:python defaultdict lambda

dd = defaultdict(lambda :[0,0]) 
dd[5][4] = 2 
print(dd) 

Но он бросает IndexError

IndexError: list assignment index out of range 

и когда я изменить код

dd[2][1] = 2 

результат:

defaultdict(<function <lambda> at 0x000001F9F10EE730>, {2: [0, 2]}) 

Я не знаю, почему индекс ge и как диапазон.

Спасибо!

ответ

3

ваш defaultdict генерирует запись по умолчанию, который имеет длину 2.

Когда вы dd[5][4] = 2, так как ключевой 5 не существует, defaultdict генерирует значение [0,0], как и ожидалось.

Затем вы обращаетесь к 5-индекс, который находится вне диапазона (как вы могли бы сделать [0,0][4] = 2)

(конечно, он работает с dd[2][1] = 2, потому что 1 находится в списке по умолчанию диапазон)

Если вы не знаете размер вашего списка, и вы не хотите знать, я предлагаю использовать словарь по умолчанию на словарь по умолчанию целых чисел, например:

dd = defaultdict(lambda : defaultdict(int)) 

(конечно, это не сгенерировать a rray, но диктофон dicts, но конструкция dd[5][4] сразу же)

Смежные вопросы