簡體   English   中英

python的最大/最小功能是否可以有多個鍵/ lambda?

[英]Is it possible to have more than one key/lambda for python's max/min functions?

以下代碼已損壞:

>>> import operator
>>> max(enumerate([[7, {'profit': 7, 'buy_idx': 0, 'sell_idx': 1}], [0, {'profit': 0, 'buy_idx': None, 'sell_idx': None}], [7, {'profit': 7, 'buy_idx': 0, 'sell_idx': 2}]]), key=operator.itemgetter(1))
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    max(enumerate([[7, {'profit': 7, 'buy_idx': 0, 'sell_idx': 1}], [0, {'profit': 0, 'buy_idx': None, 'sell_idx': None}], [7, {'profit': 7, 'buy_idx': 0, 'sell_idx': 2}]]), key=operator.itemgetter(1))
TypeError: '>' not supported between instances of 'dict' and 'dict'

我不完全確定問題出在哪里,但我相當確定這是因為max正在評估字典並嘗試比較它們,即使它們不是列表的第一個元素。

我知道如果我可以使用key=lambda x: x[0]那么只會比較每個列表的第一個元素(整數),這將解決我的問題。

>>> max([[7, {'profit': 7, 'buy_idx': 0, 'sell_idx': 1}], [0, {'profit': 0, 'buy_idx': None, 'sell_idx': None}], [7, {'profit': 7, 'buy_idx': 0, 'sell_idx': 2}]], key=lambda x: x[0])
[7, {'profit': 7, 'buy_idx': 0, 'sell_idx': 1}]

但是,我已經通過operator.itemgetter使用了密鑰,這並不是真正可以協商的,因為我需要同時獲取最大元素索引。

所以我處於困境,我需要將兩個 lambdas 傳遞給 python 的關鍵參數。

這甚至可能嗎? 如果沒有,我最好的解決方案是什么?

查找具有最大利潤和索引的字典無需將利潤值復制為list中的第一個元素。 我稍微修改了字典。

d = [{'profit': 3, 'buy_idx': 0, 'sell_idx': 1},
     {'profit': 0, 'buy_idx': None, 'sell_idx': None},
     {'profit': 7, 'buy_idx': 0, 'sell_idx': 2}]

index, maxdict = max(enumerate(d), key=lambda x: x[1]['profit'])
print(f'max profit in {maxdict} at index {index}')

Output

max profit in {'profit': 7, 'buy_idx': 0, 'sell_idx': 2} at index 2

暫無
暫無

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

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