2017-07-08 11 views
1

, wenn ich ein Wörterbuch habenDie Schlüssel aller größten Werte im Python-Wörterbuch finden?

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

wie bekomme ich die Schlüssel aller größten Werte

In diesem Fall würden sie 1 und 5 sein.

Keine doppelte Frage. auf der Suche nach allen Schlüsseln und nicht nur nach dem einen.

+0

Werfen Sie einen Blick auf [diese Antwort] (https://stackoverflow.com/questions/268272/getting-key-with-maximum-value-in-dictionary) – Tim510

+1

ich tat. aber das ist das größte zu finden. also gibt es nur 1 und nicht 5 zurück. – aditmohan96

+0

Nicht trivialer Fall hier –

Antwort

1

Es gibt eine Klasse in collections namens Counter, die genau das tut, was Sie wollen. Es bietet die genaue Funktionalität, die Sie über es erforderlich ist most_common Methode:

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

[1, 5] 

Nun ist diese wahrscheinlich nicht genau das ist, was Sie wollen, weil ich hart in der Zahl codiert 2. Sie diese bekommen können mit ein weiterer Counter über die Werte Ihres Wörterbuchs!

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] 

Hier berechnen I die Anzahl der Male, dass der häufigste Wert erfolgt durch alle unterschiedlichen Werte zu zählen, und dann das Maximum eines x.most_common(1)[0][1] Verwendung zu überprüfen.

Bitte wählen Sie diese Antwort nicht aus. @BrightOne hat die richtige Antwort. Dies ist nur eine Sache, die ich gemacht habe, um zu sehen, ob ich es vermeiden könnte, irgendetwas anderes als Zähler zu verwenden. Es ist eigentlich keine gute Idee.

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

Das ist viel weniger verschachtelt als meine Antwort. –

+0

Die einzige Empfehlung, die ich habe, besteht darin, das Tupel aus Gründen der Lesbarkeit in das Verständnis zu packen: '[Schlüssel für Schlüssel, Wert in x.items() wenn Wert == Maximum]' –

+0

@MadPhysicist danke, es ist viel besser! Bearbeitet. – BrightOne

Verwandte Themen