获取字典的最小值的键,该键又在数组中

get the key of the minimum value of a dictionary which in turn the key is in an array

我想获取给定字典中具有最小值的键,但条件是该键在给定列表中

例如这将是字典。

dict = {
    's': 0,
    'y': 5,
    't': 8,
    'z': 7,
    'x': 9
}

这是要检查的键的列表

list = ['y', 'z', 't', 'x'] 

我做了这个实现,但我认为它可以优化或以更 pythonic 的方式制作。

a = float("inf")
for key in dict:
    if key in list:
        temp=a
        a = min(a,dict[key])
        if a < temp:
            minimum = key

使用 mindct.get:

>>> min(lst, key=dct.get)
'y'
>>> 

根据 dct 字典中该键的值,这是 lst 中的最小值。

P.S。我将 dict 重命名为 dct,将 list 重命名为 lst,因此您不会覆盖变量名称。

编辑:

正如@Ch3steR 提到的,如果有任何键不在字典中但在 lst.

您可以使用:

min(lst, key=lambda x: dct.get(x, float('inf')))

或者您可以使用@Ch3steR 的方法,其中:

min(dct.keys() & lst, key=dct.get)
'y'

但我实现了我自己的 type,名为 mydict,你可以使用它,它继承了 dict 只是它还有一个 __missing__ 魔术方法定义,所以如果密钥不存在,它将给出 float('inf') (无穷大)。假设 lst 变为:

lst = ['y', 'z', 't', 'x', 'key that does not exist']

然后你继承mydict类型:

mydict = type('mydict', (dict,), {'__missing__': lambda self, key: float('inf'),})

现在您可以直接使用__getitem__

>>> min(lst, key=mydict(dct).__getitem__)
'y'
>>> 

可以继承相同的 mydict 类型:

class mydict(dict):
    def __missing__(self, key):
        return float('inf')

它也可以。

这是一种使用列表理解的方法:

dict = {
    's': 0,
    'y': 5,
    't': 8,
    'z': 7,
    'x': 9
}
list = ['y', 'z', 't', 'x'] 
temp =min([j for i,j in dict.items() if i in list])     ##output - 5
res = [i for i,j in dict.items() if dict[i]==temp]      
print(*res)

输出:

y