2017-12-10 3 views
0

Versuchen Sie, einige Strings zu analysieren und berechnen Sie die Anzahl der Male, die sie auftreten. Diese Daten werden in einem Wörterbuch gespeichert. Wenn ich die Max-Funktion verwenden würde, würde nur die erste höchste gefundene Nummer gedruckt werden.So finden Sie mehrere Maxima in einem Wörterbuch

count = {"cow": 4, "moo": 4, "sheep": 1} 
print(max(count.keys(), key=lambda x: count[x])) 
cow 

Dies würde Kuh ergeben, um das Maximum zu sein. es

from collections import defaultdict 

count = {"cow": 4, "moo": 4, "sheep": 1} 

d = defaultdict(list) 
for animal, cnt in count.items(): 
    d[cnt].append(animal) 

print(dict(d)) 
# {4: ['cow', 'moo'], 1: ['sheep']} 

print(max(d.items())[1]) 
# ['cow', 'moo'] 

Antwort

4

Warum nicht einfach halten: Wie würde ich „Kuh“ und „moo“, um beide

count = {"cow": 4, "moo": 4, "sheep": 1} 
cow, moo 
+0

Vielen Dank! Betrachtete die anderen Beiträge wie [this] (https://stackoverflow.com/questions/12402015/print-the-key-of-the-max-value-in-a-dictionary-the-pythonical-way) aber sie schienen nicht über mehr als ein Maximum zu sprechen. Entschuldige, dass ich neu bin! Können Sie erklären, wie der Code in der Druckfunktion funktioniert? –

+0

@KOOTSHOOTS Sicher, wird die Antwort aktualisieren. –

1

Gerade Gruppe der Grafen mit einem defaultdict, und nehmen Sie die maximal gedruckt werden?

mx = max(count.values()) 
print([k for k, v in count.items() if v == mx]) 
# ['cow', 'moo'] 

Der Klammerausdruck in Zeile zwei ist ein list comprehension, im wesentlichen eine kurze Hand für eine for Schleife, die eine Liste artiges Objekt läuft über (eine „iterable“) und erstellt eine neue Liste, wenn es entlang geht. In diesem Fall gibt es zwei Schleifenvariablen (k und v), deren Werte gleichzeitig durch Tupel-Entpacken zugewiesen werden (.items() gibt Paare (Schlüssel, Wert) nacheinander zurück). Zusammenfassend hier die Liste Verständnis entspricht in etwa:

result = [] 
for k, v in count.items(): 
    if v == mx: 
     result.append(k) 

Aber die Liste Verständnis läuft schneller und ist auch leichter zu lesen, wenn Sie daran gewöhnt.

Verwandte Themen