Поскольку dbm
не позволяет вам перебирать значения напрямую, вы можете перебирать ключи. Для этого вы можете изменить цикл for
так, чтобы он выглядел как
for key in patients[some_person].__dict__:
value = patients[some_person].__dict__[key]
# then continue as before
Я думаю, что более серьезной проблемой будет тот факт, что dbm
хранит только строки. Таким образом, вы не сможете сохранить список непосредственно в базе данных; вам придется хранить строковое представление этого. А это значит, что при попытке вычислить длину списка это будет не так просто, как len(value)
; вам придется разработать некоторый код, чтобы выяснить длину списка на основе того, какое строковое представление вы используете. Это может быть так просто, как len(the_string.split(','))
, просто знайте, что вы должны это сделать.
Кстати, ваша существующая функция может быть переписана с использованием генератора, например так:
def find_max_var_amt(some_person):
return max(len(value) for value in patients[some_person].__dict__.itervalues())
и если бы вы сделали это таким образом, переход на итерации по ключам выглядел бы как
def find_max_var_amt(some_person):
dct = patients[some_person].__dict__
return max(len(dct[key]) for key in dct)