Aus dictionary das häufigste bekommen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

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
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Was spricht denn dagegen das Dict. durchzugehen und das Maximum zu speichern?
Schneller gehts nicht.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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'
Das Leben ist wie ein Tennisball.
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

diese methode war mir unbekannt aber vielen dank EyDu es funktioniert, werde mich dan noch näher zu diesem operator informieren
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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'
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

*klugscheiß ein*

Code: Alles auswählen

max((k, j) for j, k in d.iteritems())[1]
*wieder aus* ;-)
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

die letzten beiden sind auuch gut und ohne import das gut
BlackJack

@CM: Äh, statt einfach mit `max()` *linear* durchzugehen *sortierst* Du also lieber!?
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

Code: Alles auswählen

max(d, key=d.__getitem__)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

bords0 hat geschrieben:

Code: Alles auswählen

max(d, key=d.__getitem__)
Das gefällt mir. :)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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 ...
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Man kann noch 8 Zeichen sparen: :wink:

Code: Alles auswählen

max(a, key=a.get)
Antworten