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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:54:03