Python字典中如何获取最大值对应的所有键?
问题分析与解决
你的代码存在几个逻辑错误,导致只能返回单个符合条件的键:
- 缩进错误:
for循环后的代码没有缩进,Python靠缩进区分代码块,这直接让循环逻辑失效。 - 变量名冲突:函数名和内部定义的
max_value变量重名,容易引发混淆。 - 列表初始化位置错误:
new_list = []放在循环内部,每次循环都会清空列表,最后只剩最后一个符合条件的键。 - 返回时机错误:
return new_list写在循环里,第一次循环就直接返回,根本不会遍历所有键。 - 引用错误:你用了
frequency[key],但函数参数是dict,应该直接用循环里的value或者dict[key],否则外部没有frequency变量时还会报错。
修正后的代码
def get_max_keys(input_dict): # 先获取字典中的最大值,只计算一次提升效率 max_val = max(input_dict.values()) # 初始化空列表用于存储结果 max_keys = [] # 遍历所有键值对 for key, value in input_dict.items(): if value == max_val: max_keys.append(key) # 遍历完成后再返回结果 return max_keys # 测试示例 Frequency = {9: 3, 2: 3, 6: 2, 8: 1, 1: 1} print(get_max_keys(Frequency)) # 输出 [9, 2]
更简洁的写法(列表推导式)
如果追求代码简洁,可用一行列表推导式实现:
def get_max_keys(input_dict): max_val = max(input_dict.values()) return [key for key, value in input_dict.items() if value == max_val]
这样就能正确返回所有对应最大值的键。
内容的提问来源于stack exchange,提问作者natalie chan
相关产品推荐
相关产品推荐

