a = [] #список
a[0] = 1 #ошибка потому что в списке нет 0 элемента и вообще никаких нет.
b = {} #словарь
b[0] = 1 #нет ошибки потому что отсутсвующие ключи словаря создаются в такой конструкции
разница в том что в списке элемент должен существовать как для чтения так и для записи
а в словаре он должен существовать только для чтения, потому что при записи он создается сам.
если нужен именно список, то надо заполнить его заранее.
a = [None]*100
a[0] = 1 #теперь ошибки нет потому что в списке 100 элементов None
a[100] = 1 #снова ошибка потому что индекс 100 это 101 элемент по порядку, которого нет