簡體   English   中英

在元組中以固定元素為鍵的字典中找到最大值

[英]Find the maximum value in a dictionary with a fixed element in a tuple as a key

我在這個論壇上搜索過很多東西,但是對於這個特殊的問題我還沒有找到任何解決方案。 假設我有一個像這樣的字典:

d = {}

d['a', 0] = 0.12
d['a', 1] = 0.23
d['a', 2] = 0.53
d['b', 4] = 0.23
d['b', 5] = 0.40
d['b', 6] = 0.39

如何找到與固定的第一個元素的最大值對應的鍵? 例如,如果我想找到元組的第二個元素,該元素為我提供了固定的'b'的最大值,我該怎么做? (在這種情況下,它應返回5,因為0.40是最大值)。

我嘗試了max(d, key=d.get)[1] ,但這為我提供了所有值中最大值的鍵,所以2。有什么想法嗎?

您必須基本上迭代所有鍵/​​值對:

def find_max_second_key(d, first_key):
    return max((v, k2) for (k1, k2), v in d.items() if k1 == first_key)[1]

d = {}

d['a', 0] = 0.12
d['a', 1] = 0.23
d['a', 2] = 0.53
d['b', 4] = 0.23
d['b', 5] = 0.40
d['b', 6] = 0.39

print(find_max_second_key(d, 'a'))
# 2
print(find_max_second_key(d, 'b'))
# 5

或者,您可以將字典轉換為嵌套結構。 這樣,您只需要使用匹配的第一個鍵來遍歷項目。

d = {}

d['a', 0] = 0.12
d['a', 1] = 0.23
d['a', 2] = 0.53
d['b', 4] = 0.23
d['b', 5] = 0.40
d['b', 6] = 0.39

d_nested = {}
for (k1, k2), v in d.items():
    d_nested.setdefault(k1, {})[k2] = v
print(d_nested)
# {'a': {0: 0.12, 1: 0.23, 2: 0.53}, 'b': {4: 0.23, 5: 0.4, 6: 0.39}}

print(max(d_nested['a'], key=d_nested['a'].get))
# 2
print(max(d_nested['b'], key=d_nested['b'].get))
# 5

嘗試這個 :

print([i[1] for i in d if d[i] == max([k for j,k in d.items() if j[0] == 'a'])][0])

它返回最大的字典鍵(元組)的可能第二項的最大值。 如果我們搜索具有第一個元素為'a'鍵的字典值,則得到0.12, 0.23, 0.53 其中0.53是最高的,所以我們打印出tuple(key)的第二項,其值為0.53

如果要基於字典中鍵的值進行排序

def func(d,key):
    new_dic = {}
    for k,v in d.items():       
        if key in k :
            new_dic.update({k:v})
    return max(new_dic, key=lambda x:new_dic[x])

d = {}

d['a', 0] = 0.12
d['a', 1] = 0.23
d['a', 2] = 0.53
d['b', 4] = 0.23
d['b', 5] = 0.40
d['b', 6] = 0.39



print(func(d, 'b'))
# output ('b', 5) 

否則,如果您想使用整體結果

max(d,key=lambda x:d[x])

您可以使用以下鍵:

d = {('a', 0): 0.12, ('a', 1): 0.23, ('a', 2): 0.53, ('b', 4): 0.23, ('b', 5): 0.4, ('b', 6): 0.39}

k = 'b'
max(d, key=lambda x: d[x] if x[0] == k else float("-inf"))
# ('b', 5)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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