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

