繁体   English   中英

从 python 中的字典中的每个索引中获取最大值

[英]Get max value from every index in a dictionary in python

我想知道如何从字典中的每个键中获取最大值。 假设我有这个:

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],}

这是预期的 output:

new_dict={(1,1,True):0, (2,1,True):0,(1,2,True):1,(2,2,True):0,}

新的 0 和 1 值含义如下:

  • 如果绝对最大值是第一个元素,则 output 值将为 0。如果不是,则为 1。
  • 示例:Abs(-1)、Abs(0.26)-> 1>0.26 -> 0 将是预期的 output。

您可以编写一个简单的argmax ,并使用简单的列表/字典理解来执行 rest。

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不是一个好主意......

您还可以通过将abs放在 argmax function 中来使事情变得更清晰:

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()})

只写你说的话。

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)

Output:

{(1, 1, True): 0, (2, 1, True): 0, (1, 2, True): 1, (2, 2, True): 0}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM