2017-07-08 434 views
1

如果我有一本字典找到python字典中所有最大值的鍵?

x ={0: 0, 1: 4, 2: 0, 3: 2, 4: 2, 5: 4} 

我如何得到所有的最大值

在這種情況下的鑰匙,他們將在1和5。

不是重複的問題。尋找所有的鑰匙,而不只是一個。

+0

看看[這個答案](https://stackoverflow.com/questions/268272/getting-key-with-maximum-value-in-dictionary) – Tim510

+1

我做到了。但那是找到最大的。所以它只返回1而不是5. – aditmohan96

+0

這裏的非平凡情況 –

回答

1

collections中有一門課叫做Counter,它完全符合你的要求。它提供給你通過它需要的具體功能是most_common方法:

from collections import counter 
maxes = Counter(x).most_common(2) 
print([x[0] for x in maxes]) 

[1, 5] 

現在,這可能不是你想要什麼,因爲我很難在數字2的編碼可以通過使用得到這個另一個Counter您的字典的值!

x = Counter(x) # This preserves x: just makes it a subclass of dict 
max_count = Counter(x.values())[x.most_common(1)[0][1]] 
maxes = x.most_common(max_count) 
maxes = [x[0] for x in maxes] 

在這裏,我算得通過計數所有不同的值,然後檢查使用x.most_common(1)[0][1]中最大的一個,經常發生的值的次數。

請不要選擇這個答案。 @BrightOne有正確的答案。這只是我做過的一件事,看看我是否可以避免使用除計數器之外的任何東西。這實際上並不是一個好主意。

3
x ={0: 0, 1: 4, 2: 0, 3: 2, 4: 2, 5: 4} 

maximum = max(x.values()) 
keys = [key for key, value in x.items() if value == maximum] 
print(keys) # => [1, 5] 
+0

這比我的回答要複雜得多。 –

+0

我唯一的建議是爲了可讀性而在理解中解開元組:'[key for key,value in x.items()if value == maximum]' –

+0

@MadPhysicist謝謝你,它好多了!編輯。 – BrightOne