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

如何在Python字典列表中根据最大price值获取prod?

问题分析与解决

你的代码出现错误的核心原因是:字典中的price值是字符串类型,而非数值类型。Python对字符串进行比较时采用的是字典序(lexicographical order),而非数值大小比较。

比如:

  • 字符串'9.718'和'80.496'比较时,第一个字符'9'的ASCII码大于'8',所以'9.718'被认为更大;
  • 字符串'7161.3'的第一个字符是'7',小于'9',因此在字符串比较中它比'9.718'小。

这就是为什么所有方法都返回9.718对应的Blue,而非预期的7161.3对应的Green。


正确解决方案

方法1:使用max()函数并转换数值类型

这是最简洁的方法,通过key参数将字符串转换为浮点数后再比较:

dd = [{'prod': 'White', 'price': '80.496'}, {'prod': 'Blue', 'price': '9.718'}, {'prod': 'Green', 'price': '7161.3'}]
max_product = max(dd, key=lambda x: float(x['price']))['prod']
print(max_product)  # 输出: Green

方法2:修正你的列表推导式

先计算最大数值,再匹配对应的产品:

dd = [{'prod': 'White', 'price': '80.496'}, {'prod': 'Blue', 'price': '9.718'}, {'prod': 'Green', 'price': '7161.3'}]
max_price = max(float(item['price']) for item in dd)
target_prod = [item['prod'] for item in dd if float(item['price']) == max_price][0]
print(target_prod)  # 输出: Green

方法3:提前转换数据类型(推荐)

如果可以控制原始数据的生成,直接将price存储为数值类型(float或int),后续操作会更简单:

# 原始数据改为数值类型
dd = [{'prod': 'White', 'price': 80.496}, {'prod': 'Blue', 'price': 9.718}, {'prod': 'Green', 'price': 7161.3}]
max_product = max(dd, key=lambda x: x['price'])['prod']
print(max_product)  # 输出: Green

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:16:21