簡體   English   中英

在字典列表中查找最大值

[英]Find maximum value in a list of dicts

我是 Python 的新手,幾天來一直卡在一個點上。

有一個像這樣的字典列表:

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

我需要 output prod中的值基於price的最大值。

這是期望的結果: 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)

Output: Blue

(幾乎正確,但“藍色”沒有price的最大值!)

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)

Output: {'prod': 'Blue', '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。

您需要將價格值轉換為key參數的浮點數:

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

這輸出:

Green

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM