You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何不使用lambda获取字典值的最大长度?

修正代码并实现需求

首先先明确原函数的几个核心错误:

  • 构建字典时,else分支错误地将self.items[i].base添加到列表,应该添加的是self.items[i].value,这会导致统计的数据完全错误
  • 返回语句逻辑混乱:dict[self.items]试图用整个items列表作为字典的键,必然触发KeyError;key=len(d)里的d未定义,语法也不成立

步骤1:正确构建统计字典

先修正字典的构建逻辑,用更直观的遍历方式替代索引循环:

def frequent_base(self):
    base_dict = {}  # 别用dict当变量名,会覆盖内置的dict类型
    for item in self.items:
        base = item.base
        value = item.value
        if base not in base_dict:
            base_dict[base] = [value]
        else:
            base_dict[base].append(value)  # 等价于 += [value],更简洁

步骤2:不使用lambda,获取值列表的最大长度

这里提供两种符合要求的实现方式:

方式1:自定义key函数

先写一个专门用来获取列表长度的函数,传给max的key参数:

def frequent_base(self):
    base_dict = {}
    for item in self.items:
        base = item.base
        value = item.value
        if base not in base_dict:
            base_dict[base] = [value]
        else:
            base_dict[base].append(value)
    
    # 自定义key函数
    def get_list_length(lst):
        return len(lst)
    
    longest_list = max(base_dict.values(), key=get_list_length)
    return len(longest_list)

方式2:直接生成长度列表取最大值

如果只需要长度不需要保留最长的列表,直接生成所有值列表的长度再取最大值即可:

def frequent_base(self):
    base_dict = {}
    for item in self.items:
        base = item.base
        value = item.value
        if base not in base_dict:
            base_dict[base] = [value]
        else:
            base_dict[base].append(value)
    
    return max(len(lst) for lst in base_dict.values())

验证示例

对于你给出的测试字典:

test_dict = {1: [1,2,3], 2:[1,2,3,4,5], 3:[1,2,3,7,8,9,10]}

上述两种方式都会正确返回7,完全符合需求。

内容的提问来源于stack exchange,提问作者LearningToCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:01:29