Seite 1 von 1
Aus dictionary das häufigste bekommen
Verfasst: Freitag 15. Mai 2009, 15:17
von cz3kit
Ich hab volgendes Problem: ich hab ein Dictionary mit File namen drinen und einen Wert wie oft sie vorkommen. Diese wurden aus einer Log Datei ausgelesen. Also etwa diese Form:
mydic = {"File":2, "File2":4, "File3":5}usw.
Jetzt will ich das er mir das File ausgibt was am häufigsten vorkommt, aber ich habe überhaupt keinen Ansatz wie ich das machen könnte.
Könnte mir irgendwer einen Tipp geben? Wäre sehr dankbar
Verfasst: Freitag 15. Mai 2009, 15:25
von darktrym
Was spricht denn dagegen das Dict. durchzugehen und das Maximum zu speichern?
Schneller gehts nicht.
Verfasst: Freitag 15. Mai 2009, 15:30
von EyDu
Code: Alles auswählen
>>> d = {"a":1, "b":2, "c":3, "d":8, "e":4}
>>> import operator
>>> max(d.iteritems(), key=operator.itemgetter(1))[0]
'd'
Verfasst: Freitag 15. Mai 2009, 15:31
von cz3kit
diese methode war mir unbekannt aber vielen dank EyDu es funktioniert, werde mich dan noch näher zu diesem operator informieren
Verfasst: Freitag 15. Mai 2009, 16:01
von numerix
Code: Alles auswählen
>>> d = {"a":1, "b":2, "c":3, "d":8, "e":4}
>>> max(d.items(), key=lambda e:e[1])[0]
'd'
Verfasst: Freitag 15. Mai 2009, 16:05
von CM
Der Aufruf von "max" erfordert das Durchgehen des ganzen Tuples. Geht auch ohne:
Code: Alles auswählen
sorted(d.items(), key = operator.itemgetter(1))[-1][0]
Gruß,
Christian
edit: Sorry, gemeint war natürlich das Snippet von EyDu - nicht numerix.
Verfasst: Freitag 15. Mai 2009, 16:14
von Nocta
Code: Alles auswählen
>>> max((k,j) for j,k in d.items())
(8, 'd')
# bzw
>>> max((k,j) for j,k in d.items())[1]
'd'
Damit mal jemand 'ne generator expression gepostet hat :p
Verfasst: Freitag 15. Mai 2009, 16:16
von CM
*klugscheiß ein*
*wieder aus*

Verfasst: Freitag 15. Mai 2009, 16:20
von cz3kit
die letzten beiden sind auuch gut und ohne import das gut
Verfasst: Freitag 15. Mai 2009, 18:10
von BlackJack
@CM: Äh, statt einfach mit `max()` *linear* durchzugehen *sortierst* Du also lieber!?
Verfasst: Freitag 15. Mai 2009, 19:48
von bords0
Verfasst: Freitag 15. Mai 2009, 20:12
von numerix
Das gefällt mir.

Verfasst: Freitag 15. Mai 2009, 20:44
von CM
Die letzte Version finde ich auch ganz ansprechend!
@BJ & EyDu: Nö, ich habe das nur falsch interpretiert und in EyDus Version max und sorted kombiniert gesehen - heute ist irgendwie wirklich nicht mein Tag und die Beiträge hier auch nicht gerade produktiv, siehe OT-Thread ...
Verfasst: Freitag 15. Mai 2009, 20:54
von HerrHagen
Man kann noch 8 Zeichen sparen: