Dictionary numerisch sortieren

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
jjice
User
Beiträge: 2
Registriert: Mittwoch 29. Juli 2020, 12:59

Hallo liebes Python-Forum,

ich habe ein Problem beim sortieren meines Dictionary und hoffe ihr könnt mir helfen.
Ich möchte das es über die Keys numerisch sortiert wird, von klein zu groß.
Vielen Dank im vorraus :D

Wie es sein sollte:

Code: Alles auswählen

{'1': 15, '2': 15, '3': 9, '10': 15, '29': 15, '30': 9, '101': 15}

Wie es ist:

Code: Alles auswählen

{'1': 15, '10': 15, '101': 15, '2': 15, '29': 15, '3': 9, '30': 9}
Was ich bis jetzt habe (gekürzt):

Code: Alles auswählen

d = {'10': 15, '3': 9, '30': 9, '101': 15, '2': 15, '29': 15, '1': 15}
d_sorted = dict(sorted(d.items(), key=lambda x: x[0]))
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Die Keys sind Strings, ergo werden diese auch nach der Lexikographischen Ordnung sortiert.
Du müsstest die keys in int umwandeln.

Code: Alles auswählen

d = {'10': 15, '3': 9, '30': 9, '101': 15, '2': 15, '29': 15, '1': 15}
d_sorted = dict(sorted(d.items(), key=lambda x:int(x[0])))
Das Schöne daran ist, dass die Keys nicht modifiziert werden. Sie werden lediglich in int umgewandelt, um die Reihenfolge festzulegen.
Das neu Dict hat die Objekte aus dem alten Dict, nur in einer anderen Reihenfolge.

Damit es nicht so hässlich aussieht, kann man die key-funktion auch als Funktion notieren.

Code: Alles auswählen

def by_numeric_key(item):
    return int(item[0])
    

d = {'10': 15, '3': 9, '30': 9, '101': 15, '2': 15, '29': 15, '1': 15}
d_sorted = dict(sorted(d.items(), key=by_numeric_key))
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum sind die Keys überhaupt Strings, wenn es doch Zahlen sind?
jjice
User
Beiträge: 2
Registriert: Mittwoch 29. Juli 2020, 12:59

Vielen Dank genau das was ich wollte :D
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Die Frage von Sirius3 ist berechtigt.

Wenn du z.B. später damit rechnen willst, musst du sie wieder in int umwandeln.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten