[英]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
一起dct.get
:
>>> min(lst, key=dct.get)
'y'
>>>
根據dct
字典中該鍵的值,這將獲得lst
的最小值。
PS 我將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')
(infinity)。 讓我們說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')
它也會起作用。
這是使用List Comprehension 的一種方法:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.