字典列表中Cost字段max计算结果异常的技术求助
问题:字典列表中使用
max()计算最高Cost值得到错误结果 嘿,这个问题我之前也踩过坑!你得到错误结果的核心原因是:你的Cost值是字符串类型,而非数值类型。
当你用lambda x:x["Cost"]作为max()的排序key时,Python会按照字符串的字典序来比较大小,而不是我们直觉里的数值大小。举个例子,字符串 "910" 和 "2200" 比较时,第一个字符'9'的ASCII码比'2'大,所以Python会认为"910"比"2200"更大——这就是为什么你得到了错误的最大值910。
解决办法
有两种简单的修复方式,看你的需求选就行:
1. 计算时临时转换类型
直接在lambda表达式里把Cost转换成整数(如果有小数成本就用float()):
maxPricedItem = max(t, key=lambda x: int(x["Cost"])) print(maxPricedItem['Cost']) # 输出:2200
2. 提前统一转换类型
如果后续还会频繁用到数值类型的Cost,建议先遍历列表把所有Cost字段转成整数:
for hotel in t: hotel["Cost"] = int(hotel["Cost"]) # 之后再用原来的代码就正常了 maxPricedItem = max(t, key=lambda x:x["Cost"]) print(maxPricedItem['Cost']) # 输出:2200
用上面的方法,就能正确找到列表中Cost最高的酒店(也就是Sr. No.为987、Cost为2200的那一项)啦。
内容的提问来源于stack exchange,提问作者Shorya Sharma
相关产品推荐
相关产品推荐

