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
相关产品推荐
相关产品推荐

