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

