Создание объектов и добавление их в список с помощью чтения CSV-ввода в python - PullRequest
0 голосов
/ 29 апреля 2020

В настоящее время это мой код для чтения файла CSV, создания объекта персонажа и добавления каждого человека в список. Одна строка Пример ввода: Джон, Лэнгли, 1,2,2,3,5

Когда я печатаю (за) каждый раз после создания объекта персонажа. Мой вывод верен, но как только я добавлю этого человека в список, который я составил, цифры c значения AKA «черты» для этого человека будут такими же, как последние черты людей в файле CSV.

Например:

Джон, Лэнгли, 1,2,2,3,5 - (добавить в список) -> Джон, Лэнгли, 1,1,1 , 1,1

Изабель, Смит, 3,2,4,4,0 - (добавить в список) -> Изабель, Смит, 1,1,1,1 , 1

Джон, Доу, 1,1,1,1,1 - (добавить в список) -> Джон, Доу, 1,1,1,1,1

Это влияет на меня тем, что я продолжаю, потому что мне нужно, чтобы черты объектов человека были действительными, чтобы выполнить их анализ в следующих двух методах. ПОЖАЛУЙСТА, игнорируйте мои заявления о печати. ОНИ БЫЛИ ДЛЯ МОИХ ЦЕЛЕЙ ОТЛАДКИ

def read_file(filename):
    file = open(filename, "r", encoding='utf-8-sig')
    Traits_dict = {}
    pl = []
    next(file)
    for line in file:
        line = line.rstrip('\n')
        line = line.split(',')
        first = str(line[0].strip())
        last = str(line[1].strip())
        w = line[2].strip()
        hobby = line[3].strip()
        social = line[4].strip()
        eat = line[5].strip()
        sleep = line[6].strip()
        Traits_dict["Work"] = w
        Traits_dict["Hobbies"] = hobby
        Traits_dict["Socialize"] = social
        Traits_dict["Eat"] = eat
        Traits_dict["Sleep"] = sleep
        per = Person(first, last, Traits_dict)
        print(per)
        pl.append(per)
    print(pl[0])
    print(pl[1])
    print(pl[2])
    print(pl[3])
    print(pl[4])
    return pl

1 Ответ

0 голосов
/ 29 апреля 2020

Все Traits_dict = {} одинаковы для всех объектов, так как вы инициируете dict перед l oop, поэтому он дает каждому объекту Person одну и ту же ссылку на dict в нем. Вы можете поместить Traits_dict = {} внутри l oop, чтобы он создавал для каждого персонажа новый дикт

for line in file:
    Traits_dict = {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...