Python获取字典中值最大的键 报NameError及输出结果错误问题求助
问题排查与解决方案
问题1:NameError报错原因
- 方括号包裹的代码是Python的列表推导式,作用是遍历字典所有键,筛选出值等于字典值最大值的键,最终返回一个由符合条件的键组成的列表。
- 列表推导式内部的变量
x是局部作用域变量,仅在推导式运行过程中有效,推导式执行结束后就会被销毁。 - 你没有将列表推导式生成的结果列表赋值给变量保存,反而尝试打印推导式内部的临时变量
x,因此触发NameError: name 'x' is not defined报错。
问题2:结果匹配错误原因
- 你的字典每个键对应的值是数值列表,直接调用
max(humidity_for_states.values())时,Python会直接对多个列表做大小比较,规则是按顺序逐个对比列表元素,第一个元素大的列表整体就被判定为更大,和你预期的「对比所有列表里的单个数值的最大值」逻辑完全不符。 - VIC对应的列表第一个元素是92.0,大于NSW列表的第一个元素81.0,因此Python判定VIC的列表是所有值里的最大值,最终匹配到错误的键。
基础语法解决方案
全部用基础for循环实现,不需要用到你不熟悉的高级方法:
# 第一步:计算所有湿度列表中的全局最大数值 global_max = 0 for humi_list in humidity_for_states.values(): # 取当前列表的最大值 current_max = max(humi_list) if current_max > global_max: global_max = current_max # 第二步:筛选出对应列表最大值等于全局最大值的键 result = [] for state, humi_list in humidity_for_states.items(): if max(humi_list) == global_max: result.append(state) print(result)
运行后输出结果为['NSW'],符合预期。
如果之后你想使用列表推导式简化代码,正确写法如下,不会再出现NameError:
# 先计算全局最大值的逻辑和上述一致 global_max = 0 for humi_list in humidity_for_states.values(): current_max = max(humi_list) if current_max > global_max: global_max = current_max # 列表推导式生成结果,赋值给变量后打印 result = [state for state, humi_list in humidity_for_states.items() if max(humi_list) == global_max] print(result)
内容的提问来源于stack exchange,提问作者Mathhurtsmybrain
相关产品推荐
相关产品推荐

