[英]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.