#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]
в качестве примера, чтобы понять проблему