如何用Python重写循环字典?

如何用Python重写循环字典?,python,dictionary,for-loop,Python,Dictionary,For Loop,我有一个类字典,其中类包含字符串列表的属性 我做这个函数是为了找出某个特定的人在其中一个列表中的最大项数 def find_max_var_amt(some_person) #pass in a patient id number, get back their max number of variables for a type of variable max_vars=0 for key, value in patients[some_person].__dict__.ite

我有一个类字典,其中类包含字符串列表的属性

我做这个函数是为了找出某个特定的人在其中一个列表中的最大项数

def find_max_var_amt(some_person) #pass in a patient id number, get back their max number of variables for a type of variable
    max_vars=0
    for key, value in patients[some_person].__dict__.items():
        challenger=len(value)
        if max_vars < challenger:
            max_vars= challenger
    return max_vars
def find_max_var_amt(某些人)#传入患者id号,获取某一类型变量的最大变量数
最大值=0
对于键,患者[某些人]中的值。\u dict\u.items():
挑战者=len(值)
如果max_vars<挑战者:
max_vars=挑战者
返回最大值

我要做的是重写它,这样我就不必使用.iteritems()函数。这个
find\u max\u var\u amt
函数可以正常工作,但我正在将代码从使用字典转换为使用dbm模块的数据库,因此典型的字典函数将不再适用于我,即使分配和访问键:值对的语法相同。谢谢你的帮助

由于
dbm
不允许您直接迭代值,因此您可以迭代键。为此,您可以修改
,使
循环看起来像

for key in patients[some_person].__dict__:
    value = patients[some_person].__dict__[key]
    # then continue as before
def find_max_var_amt(some_person):
    dct = patients[some_person].__dict__
    return max(len(dct[key]) for key in dct)
不过,我认为更大的问题是
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())
如果这样做的话,对键进行迭代的更改如下

for key in patients[some_person].__dict__:
    value = patients[some_person].__dict__[key]
    # then continue as before
def find_max_var_amt(some_person):
    dct = patients[some_person].__dict__
    return max(len(dct[key]) for key in dct)

啊!!我的眼睛…应该…修复…识别。(使它有点难以阅读)也许大师们从你给出的东西中知道,但最好是一些示例数据,让你的代码运行起来,并看到它的实际效果。我必须说,我觉得你们的代码很奇怪,但我还并没有完全融入到课堂上。我觉得奇怪的是,你输入的是id号而不是object.ne,使用
vars(患者[某些人])
\uu dict\uuuuuuuuuuu