在一个字典列表中找到最大值

3

我是Python的新手,已经卡在一个问题上好几天了。

有一个像这样的字典列表:

dd = [{'prod': 'White', 'price': '80.496'}, {'prod': 'Blue', 'price': '9.718'}, {'prod': 'Green', 'price': '7161.3'}]

我需要根据price的最大值输出prod中的值。

这是期望的结果:Green

我已经尝试了很多方法,基于我在SO上找到的信息:

dd = [{'prod': 'White', 'price': '80.496'}, {'prod': 'Blue', 'price': '9.718'}, {'prod': 'Green', 'price': '7161.3'}]
L = [v for v in dd if v['price']==max([u['price']for u in dd])][0]['prod']
print(L)

输出:

蓝色

(几乎正确,但是“蓝色”不是价格的最大值!)

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

输出:{'prod': '蓝色', 'price': '9.718'}

dd = [{'prod': 'White', 'price': '80.496'}, {'prod': 'Blue', 'price': '9.718'}, {'prod': 'Green', 'price': '7161.3'}]
L = max(e['price'] for e in dd)
print(L)

Output: 9.718

from operator import itemgetter
dd = [{'prod': 'White', 'price': '80.496'}, {'prod': 'Blue', 'price': '9.718'}, {'prod': 'Green', 'price': '7161.3'}]
L = max(map(itemgetter('price'), dd))
print(L)

Output: 9.718

dd = [{'prod': 'White', 'price': '80.496'}, {'prod': 'Blue', 'price': '9.718'}, {'prod': 'Green', 'price': '7161.3'}]
seq = [x['price'] for x in dd]
L = max(seq)
print(L)

Output: 9.718

在所有情况下,最大值都是9.718而不是7161.3。我该如何解决这个问题?我正在使用运行Python 3.9的MS Visual Studio。

2
“9.718”比“7161.3”大,就像“two”比“four”大一样——字符串是按字典顺序比较的(按字母表顺序,但不仅限于字母)。如果您想进行数值比较,您需要将这些字符串转换为数字(在本例中为浮点数)。 - Samwise
1个回答

4

您需要将价格值转换为浮点数,以便用于key参数:

max(dd, key=lambda x: float(x['price']))['prod']

这将输出:
Green

我获得了: 语法错误: 扫描字符串文字时出现EOL - Frasier
1
哦,抱歉))我在上面的代码中不小心多打了一个 ' 符号。谢谢! - Frasier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接