Применение определенного изменения ко всем элементам в списке ( Python)

#python #python-3.x #list

#python #python-3.x #Список

Вопрос:

Я работаю над базой данных статистики человека для симуляционной игры и не могу определить определенную функцию. Данные о каждом пользователе хранятся в виде строки в humandict списке. Каждый игровой год ageup() следует вызывать функцию и изменять значение данных каждой строки.

Это формат строковых данных, который я использую (список состоит из этих значений, в которых хранятся данные о каждом человеке) :

##ID, age, strengths, smarts

Я вызываю .split() метод, чтобы разделить эти разные числа в строке на список и применить int() к каждому элементу списка, чтобы использовать их в математике. ageup() Функция должна получить доступ к каждому humandict элементу и изменить значение age на 1. Это код, который я использую в настоящее время (который работает не так, как предполагалось):

     for unit in humandict:
        human = unit.split()
        age = int(human[1])
        age  = 1
        replace = (str(human[0]) " " str(age) " " str(human[2]) " " str(human[3]))
        humandict[int(human[0])] = replace
    print(humandict)
 

Код успешно выполняется один раз, и при следующем вызове функции я получаю следующую ошибку:

 File "main.py", line 15, in ageup
    human = unit.split()
AttributeError: 'NoneType' object has no attribute 'split'
 

Комментарии:

1. humandict это список или словарь? Вы выбрали запутанное имя переменной.

2. Зачем хранить строки, если вам всегда нужно разбивать, отбрасывать из строк, изменять, возвращать к строкам, а затем собирать их заново? Похоже, вы используете неправильный инструмент для работы. Возможно, иметь словарь словарей, а не список неудобных строк.

Ответ №1:

Я просто не понимаю, где возникает проблема, это может быть из-за неправильного назначения идентификатора или чего-то еще. Но я точно знаю, что использование dictionary здесь — лучший и эффективный способ обработки данных.

Итак, вот как вы можете реализовать то же самое со словарем:

 human_list_of_dict = [{'ID':<int>, 'age':<int>, 'strengths':<str>, 'smarts':<str>}]
 

выше написан список словарей для хранения данных, сейчас в нем всего 1 словарь, но их может быть столько, сколько вам нужно. затем вы просто вызываете его так же, как список с небольшими изменениями.

 for unit in human_list_of_dict:
    unit['age'] = unit['age'] 1
 

Таким образом, вы можете избавить себя от необходимости преобразовывать строку в список и наоборот. Таким образом, код также эффективен (поскольку требуется меньше манипуляций с данными).

Комментарии:

1. и если вам конкретно нужен ответ на проблему со списком, пожалуйста, загрузите humandict[0] в качестве примера, чтобы понять проблему