Forum: PC-Programmierung dictionary - sorted key funktion


von Matthias S. (Gast)


Lesenswert?

Hallo,

es geht um ein dictionary in Python3, welches nach seinen Values 
sortiert werden soll und auch wird.
1
srtd_dct = [(k, read_dct[k]) for k in sorted(read_dct, key=read_dct.get, reverse=True)]

Macht auch was es soll, nur habe ich ein Verständnisproblem mit dem 
zweiten Parameter der sorted Funktion. Lt. Manual können hier sogenannte 
key Funktionen eingesetzt werden, aber das ist nicht verständlich 
dokumentiert finde ich.

Auf das read_dct wird hier eine Methode/Klasse get angewendet. Weiß 
jemand woher dieses get kommt und was es genau machen soll?

Ist das vielleicht das get(section, option, *, raw=False, vars=None[, 
fallback]) aus der Klasse configparser??

von A. S. (rava)


Lesenswert?

das dict hat doch auch eine get-methode. Die wird übergeben.
Ist mir nicht ganz klar, was da passiert, oder warum man dieses 
key-argument verwenden soll. Es ist dafür da, um aus einem 
iterationsobject eine Sortiergröße zu berechnen. Das erscheint mir 
dict.get nicht wirklich zu machen. Eher müsste sowas wie
1
lambda x: x[0]
 funktionieren, das aus dem key, value pair den key rausholt.


ich würde schreiben:
1
srtd_dct = [(k, read_dct[k]) for k in sorted(read_dct.keys())]


siehe auch hier und hier für weitere Vorschläge:
https://stackoverflow.com/questions/1679384/converting-python-dictionary-to-list
https://stackoverflow.com/questions/674519/how-can-i-convert-a-python-dictionary-to-a-list-of-tuples


achja und es gibt auch ordered dictionary objekte.

: Bearbeitet durch User
von Matthias S. (Gast)


Lesenswert?

A.S. schrieb:

>ich würde schreiben:
>srtd_dct = [(k, read_dct[k]) for k in sorted(read_dct.keys())]

Das sortiert keine Values, jedefalls nicht bei mir.

Danke auch für Deine anderen Vorschläge. Nochmal, die Sache funktioniert 
bei mir mit der gezeigten dict comprehension. Ich weiß halt nur nicht 
wie genau der zweite Parameter der sorted Funktion arbeitet. Das würde 
ich gerne wissen.

In einem Buch habe ich auch so etwas als zweiten Parameter gesehen
sorted(.., key=len,..). Verstehe ich zwar, nur wo kommt das len genau 
her??

von Sven B. (scummos)


Lesenswert?

Die Funktion wird halt aufgerufen und danach wird dann sortiert. 
d.get(x) auf ein dict macht dasselbe wie d[x]. Es wird also nach den 
Values sortiert. Du könntest auch lambda x: 1/d.get(x) angeben, dann 
würde nach eins durch den Values sortiert werden ...

von Matthias S. (Gast)


Lesenswert?

Sven B. schrieb:
>d.get(x) auf ein dict macht dasselbe wie d[x]

4.10. Mapping Types — dict
.
.
.
get()

... und es wurde Licht. Hatte mir die library reference zu dict nicht 
angesehen. THX

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.