簡體   English   中英

獲取字典的最小值的鍵,而該鍵又位於數組中

[英]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一起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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM