При записи элементов списка (словарей) в файл следует ошибкаа KeyError: 0

def new_dict(self):
    print("You want to create a new dictionary?(yes or no)- ")
    ans = input()
    n = 0
    while ans.upper() == 'YES':
        print("People №", n)
        nam = str(input("Person Name: "))
        sur = str(input("Person Surname: "))
        age = int(input("Person age: "))
        color = str(input("Person Lovely color: "))
        self.dict_1 = {
            "Name": nam,
            "Surname": sur,
            "Age":  age,
            "Lovely color": color}
        self.main_list.append(self.dict_1)
        ans = input("Write a next person(Yes or no)? ")
        n += 1
        if ans.upper() == 'NO':
            break

def file_print(self):
    with open("C:/Users/vlodko/Desktop/PYTHON_WORK/base.txt") as file:
        for i in range(len(self.main_list)):
            file.write("Name: "+self.dict_1[i]["Name"]+'\n')
            file.write("Surname: " + self.dict_1[i]["Surname"] + '\n')
            file.write("Age: " + str(self.dict_1[i]["Age"]) + '\n')
            file.write("Lovely color: " + self.dict_1[i]["Lovely color"] + '\n')
    file.close()

Ответы (1 шт):

Автор решения: Jack_oS

Вы в def new_dict() формируете словарь с ключами Name, Surname, Age и Lovely color. Среди них нет ключа-нумератора, по которому вы дальше пытаетесь брать значание (в self.dict_1[i]["Name"], например). Потом добавляете этот словать в список main_list.

Если я правильно понял, и нужно обойти именно список main_list и записать в файл каждую пару ключ-значение из словарей с новой стоки, то так:

def file_print(self):
    with open("C:/Users/vlodko/Desktop/PYTHON_WORK/base.txt", "w") as file:
        for row in self.main_list:
            file.write(f'Name: {row["Name"]}\n')
            file.write(f'Surname: {row["Surname"]}\n')
            file.write(f'Age: {row["Age"]}\n')
            file.write(f'Lovely color: {row["Lovely color"]}\n')

Или даже так, раз у вас ключ используется, как начало строки:

for row in self.main_list:
    for k, v in row.items():
        file.write(f'{k}: {v}\n')

PS и file.close() там не нужен, вам только вчера об этом говорили ))

→ Ссылка