Я подозреваю, что эту проблему было бы намного проще решить, если бы вы использовали словари для хранения большего количества ваших данных.Например, вместо того, чтобы помещать people
в список, а только в словарь с указанием их имени, вы можете сразу искать соответствующий экземпляр person
, вместо того чтобы каждый раз повторять список.
Аналогично, счет за месяц, вероятно, должен быть другим словарем, или, возможно, подтипом словаря, таким как collections.Counter
(который специально предназначен для подсчета вещей).
Есть другая проблема с настройкойmonthlyTaskCount
в вашем классе: все экземпляры будут иметь один и тот же список, поскольку он создается как переменная класса.Вероятно, вам следует перенести его создание в метод __init__
, чтобы каждый person
получил свою собственную копию.
В любом случае, вот мое предложение:
import collections
class person:
def __init__(self, name):
self.name = name
monthlyTaskCount = collections.Counter()
bob = person("Bob Smith")
sam = person("Sam Jones")
amy = person("Amy Owen")
people = {p.name: p for p in [bob, sam, amy]}
С улучшенными структурами данных вашБухгалтерия становится легкой:
for x in taskList: #contains x.personName, x.taskName, x.monthPerformed
people[x.personName].monthlyTaskCount[x.monthPerformed] += 1