我想獲取給定字典中具有最小值的鍵,但條件是該鍵在給定串列中
例如,這將是字典。
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
uj5u.com熱心網友回復:
使用min有dct.get:
>>> min(lst, key=dct.get)
'y'
>>>
這是lst基于dct字典中該鍵值的最小值。
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, named 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')
它也會起作用。
uj5u.com熱心網友回復:
這是使用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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329508.html
