Всякий раз, когда вы делаете dictionary[i] = data_list
, вы фактически назначаете ссылку на список в словарную статью. Рассмотрим следующий пример:
>>> l = [1,2,3]
>>> d = {}
>>> d["a"] = l
>>> d["b"] = l
>>> d
{'a': [1, 2, 3], 'b': [1, 2, 3]}
>>> l.clear()
>>> d
{'a': [], 'b': []}
Как видите, изменение l
отражено во всех значениях словаря. Каждый раз, когда вы выводите на печать, один и тот же список назначается одной, двум или трем словарным статьям соответственно. Поскольку значения всегда одни и те же, похоже, что вы каждый раз добавляете разные списки, но это не так.
Что вы действительно хотите сделать, это создать новый список для каждой итерации цикла:
for i in df.index:
...
data_list = []
data_list.append(addr)
data_list.append(width)
data_list.append(int_endianness)
dictionary[i] = data_list
или короче:
dictionary[i] = [addr, width, int_endianness]
Использование этого кода data_list
будет содержать новый список на каждой итерации, без связи с ранее определенными списками.