2010-08-04 74 views
0

我有一个类的字典,其中的类保存属性是字符串列表。如何在Python中重写此词典for循环?

我做了这个功能来找出最大数量的项目在一个特定的人列表中。

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 

我想要做的是重写它,以便我不必使用.iteritems()函数。这find_max_var_amt函数可以正常工作,但我将代码从使用字典转换为使用dbm模块的数据库,因此典型的字典函数将不再适用于我,即使分配和访问key:value对的语法将是一样的。谢谢你的帮助!

+1

啊!我的眼睛......应该......修正......身份。 (这使得它很难阅读) – 2010-08-04 18:45:35

+0

也许大师知道你给出的内容,但更好的方法是获得代码运行的一些示例数据,并在运行中看到它。必须说,我觉得你的代码很奇怪,但我还没有把它写入类的词典中。我感到奇怪的是你传递了id_number而不是object。 – 2010-08-04 19:42:04

回答

2

由于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(','))一样简单,只要知道你必须这样做。

顺便说一句,你的现有功能可以使用一台发电机被改写,就像这样:

​​3210

,如果你做了这样的说法,来遍历键的变化看起来就像

def find_max_var_amt(some_person): 
    dct = patients[some_person].__dict__ 
    return max(len(dct[key]) for key in dct) 
+0

整理者使用'vars(患者[some_person])''而不是'__dict__' – 2010-08-04 23:15:56