亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據字典列表中另一個鍵的值獲取一個鍵的最小值?

如何根據字典列表中另一個鍵的值獲取一個鍵的最小值?

藍山帝景 2023-09-26 16:42:55
我有一個字典列表,看起來像 -"produce": [    {        "name": "carrot",        "type": "vegetable",        "price": 10.0,        "units": "KG"    },    {        "name": "potato",        "type": "stem tuber",        "price": 2.0,        "units": "KG"    },    {        "type": "fruit",        "price": 5.0,        "units": "KG"    }]如果類型是水果或塊莖,我需要獲得最低的價格。我收到類型錯誤 -TypeError: 'float' object is not iterable我有以下代碼 -for m in produce:    if ((m.get('type') == 'stem tuber') or         (m.get('type') == 'fruit')       ):       fPrice = min(m['price'])我收到錯誤fPrice = min(m['price'])。我不知道如何解決這個問題。有人可以幫忙嗎?我需要獲得5.0和之間的最低價格2.0,所以答案應該是2.0。
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

您收到錯誤是因為您向 提供了單獨的數字min(),并且min想要一個iterable諸如 a 的數字list。我們該如何解決這個問題?假設你有一本像這樣的字典:


mydict = {"produce": [

? ? {

? ? ? ? "name": "carrot",

? ? ? ? "type": "vegetable",

? ? ? ? "price": 10.0,

? ? ? ? "units": "KG"

? ? },

? ? {

? ? ? ? "name": "potato",

? ? ? ? "type": "stem tuber",

? ? ? ? "price": 2.0,

? ? ? ? "units": "KG"

? ? },

? ? {

? ? ? ? "type": "fruit",

? ? ? ? "price": 5.0,

? ? ? ? "units": "KG"

? ? }

]}

produce?=?mydict['produce']

是時候構建列表理解了!

您想要迭代列表中的項目produce。

[for?m?in?produce]

然后,您想要檢查該類型是否在某些字符串集中。

[for?m?in?produce?if?m.get('type')?in?{'stem?tuber',?'fruit'}]

然后,您想要提取其價格。如果不存在價格,則 0 似乎是合理的默認值!

[m.get('price',?0)?for?m?in?produce?if?m.get('type')?in?{'stem?tuber',?'fruit'}]

然后你想找到最小值

min([m.get('price',?0)?for?m?in?produce?if?m.get('type')?in?{'stem?tuber',?'fruit'}])

您還可以去掉周圍的方括號m.get(...),它就成為一個生成器表達式

關于。?“如何處理列表理解中沒有莖塊莖或水果類型記錄的情況”

您可以將另一個項目添加到列表中,如下所示:

min([m.get('price',?0)?for?m?in?produce?if?m.get('type')?in?{'stem?tuber',?'fruit'}]?+?[-1])

據推測,沒有任何成本為 -1(0 是最小值)。那么如果你得到-1,你就知道沒有匹配的東西。


查看完整回答
反對 回復 2023-09-26
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

您將單獨的價格提供給min,這是行不通的。相反,提供可迭代的價格。您可以使用生成器表達式:

low = min(

? ? m['price']

? ? for m in produce

? ? if m.get('type') in {'stem tuber', 'fruit'}

? ? )

print(low)? # -> 2.0

如果它可以幫助您更好地理解,這就像使用列表理解然后將列表輸入到min,但更直接。


prices = [

? ? m['price']

? ? for m in produce

? ? if m.get('type') in {'stem tuber', 'fruit'}

? ? ]

low = min(prices)

print(low)? # -> 2.0

要處理沒有匹配價格的情況,請將min部分包裝在try塊中并使用except ValueError。舉例來說,讓我們使用現有數據,但假設您正在尋找葫蘆的最低價格:


try:

? ? low = min(

? ? ? ? m['price']

? ? ? ? for m in produce

? ? ? ? if m.get('type') in {'gourd'}

? ? ? ? )

except ValueError:

? ? print('No matching prices')

? ? import sys

? ? sys.exit(1)


查看完整回答
反對 回復 2023-09-26
  • 2 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號