我希望得到在给定字典中有最小值的键,但条件是该键位于给定的列表中。
例如,这将是字典。
dict = {
's': 0,
'y': 5,
't': 8,
'z': 7,
'x': 9
}这是要检查的键的列表
list = ['y', 'z', 't', 'x'] 我做了这个实现,但我认为它可以优化或制作更多的节奏曲。
a = float("inf")
for key in dict:
if key in list:
temp=a
a = min(a,dict[key])
if a < temp:
minimum = key发布于 2021-10-20 04:06:02
将min与dct.get结合使用
>>> min(lst, key=dct.get)
'y'
>>> 这是lst中基于dct字典中该键的值的最小值。
我将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')它也会起作用。
发布于 2021-10-20 16:10:20
下面是一种使用列表理解的方法
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 https://stackoverflow.com/questions/69640180
复制相似问题