获取字典的最小值的键,该键又在数组中
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
使用 min
和 dct.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
我想获取给定字典中具有最小值的键,但条件是该键在给定列表中
例如这将是字典。
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
使用 min
和 dct.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