我想知道如何從字典中的每個鍵中獲取最大值。假設我有這個:
dict={(1,1,True):[-1, 0.26], (2,1,True):[0.1, 0],(1,2,True):[0.01, -1],(2,2,True):[1, -0.11],}
這是預期的輸出:
new_dict={(1,1,True):0, (2,1,True):0,(1,2,True):1,(2,2,True):0,}
新的 0 和 1 值的含義如下:
- 如果絕對最大值是第一個元素,則輸出值為 0。如果不是,則為 1。
- 示例: Abs(-1), Abs(0.26)-> 1>0.26 -> 0 將是預期的輸出。
uj5u.com熱心網友回復:
只寫你說的。
dct={
(1,1,True):[-1, 0.26],
(2,1,True):[0.1, 0],
(1,2,True):[0.01, -1],
(2,2,True):[1, -0.11],
}
for key, value in dct.items():
# check 'abs(item_zero) with 'abs(item_one)' as 'boolean'
# then convert 'False -> 0' and 'True -> 1'.
dct[key] = int(abs(value[0]) <= abs(value[1]))
print(dct)
輸出:
{(1, 1, True): 0, (2, 1, True): 0, (1, 2, True): 1, (2, 2, True): 0}
uj5u.com熱心網友回復:
您可以撰寫一個簡單的argmax函式,然后使用簡單的串列/字典推導來完成其余的作業。
def argmax(lst):
return max(range(len(lst)), key=lambda i: lst[i])
my_dict = {(1, 1, True): [-1, 0.26], (2, 1, True): [0.1, 0], (1, 2, True): [0.01, -1], (2, 2, True): [1, -0.11], }
print({k: argmax([abs(v_) for v_ in v]) for k, v in my_dict.items()})
注意:重寫不是一個好主意dict...
您也可以通過將absargmax 函式放入內部來使事情更清潔:
def abs_argmax(lst):
return max(range(len(lst)), key=lambda i: abs(lst[i]))
my_dict = {(1, 1, True): [-1, 0.26], (2, 1, True): [0.1, 0], (1, 2, True): [0.01, -1], (2, 2, True): [1, -0.11], }
print({k: abs_argmax(v) for k, v in my_dict.items()})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532887.html
標籤:Python字典
