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

Python字典问题:将NaN替换为0后获取最值对应的键

解决带NaN的字典最值键获取问题

嘿,这个问题我碰到过!因为NaN(非数字)在Python的比较运算里会返回False,直接用max()/min()处理包含NaN的字典项就会出错。咱们只要先把NaN替换成0,就能顺利找到对应最值的键了,给你两种实用的方案:

方案一:先生成处理后的字典(直观易读)

先创建一个去除NaN的新字典,把所有NaN值替换为0,再基于这个新字典找最值键:

import operator
import numpy as np

# 原始字典
dictionary_id_value = {3: np.nan, 4: 0.0, 5: -10.0, 7: 0.0, 10: -1.0, 12: 0.0, 14: 0.0, 15: 8}

# 替换NaN为0,生成处理后的字典
processed_dict = {key: 0.0 if np.isnan(value) else value for key, value in dictionary_id_value.items()}

# 获取最大值对应的键
max_key = max(processed_dict.items(), key=operator.itemgetter(1))[0]
# 获取最小值对应的键
min_key = min(processed_dict.items(), key=operator.itemgetter(1))[0]

print(f"最大值对应键是{max_key}")  # 输出:15
print(f"最小值对应键是{min_key}")  # 输出:5

方案二:直接在最值函数中处理值(更高效)

不用额外生成新字典,直接在max()/min()的key参数里处理NaN值,节省内存:

import operator
import numpy as np

# 原始字典
dictionary_id_value = {3: np.nan, 4: 0.0, 5: -10.0, 7: 0.0, 10: -1.0, 12: 0.0, 14: 0.0, 15: 8}

# 直接在key函数中替换NaN为0
max_key = max(dictionary_id_value.items(), key=lambda x: 0.0 if np.isnan(x[1]) else x[1])[0]
min_key = min(dictionary_id_value.items(), key=lambda x: 0.0 if np.isnan(x[1]) else x[1])[0]

print(max_key)  # 输出:15
print(min_key)  # 输出:5

注意事项

如果你的NaN是来自math模块的math.nan,只需把代码里的np.isnan()换成math.isnan()即可,记得提前导入math模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:52:28