如何重写这个Python中的字典for循环?

0 投票
1 回答
763 浏览
提问于 2025-04-16 02:19

我有一个字典,这个字典里面存放的是一些类,每个类都有一些属性,这些属性是字符串的列表。

我写了一个函数,用来找出某个人的这些列表中,最多有多少个项目。

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模块的数据库,所以一些常见的字典功能就不再适用了,尽管赋值和访问键值对的语法是一样的。谢谢你的帮助!

1 个回答

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(',')) 来实现,但要记住,你必须这样做。

顺便说一下,你现有的函数可以用生成器重写,像这样:

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)

撰写回答