[Python-de] Dictionary sortieren

Stefan Behnel behnel_ml at gkec.informatik.tu-darmstadt.de
Sam Nov 5 16:35:00 CET 2005


Torsten Rudolph schrieb:
> Hallo Liste,

Hallo Schreiber!

> ich habe ein Dictionary welches als Schlüssel beliebige Strings enthält
> und als Werte Zahlen.
> 
> z.B. "abc" : "1"
>      "def" : "5"
>      "ghi" : "3"
> 
> Dieses möchte ich sortiert nach den Werten ausgeben.
> 
> z.B. "1 abc"
>      "3 ghi"
>      "5 def"
> 
> Wie kann ich das realisieren. Eine sort() Funktion gibt es ja nicht.

Sowas vielleicht?

d = { ... }
pairs = sorted((value, key) for (key, value) in d.iteritems())
# Ausgabe
for value, key in pairs:
    print "%d %s" % (value, key)

Funktioniert mit Py2.4, allerdings werden bei mehrfach vorhandenen Werten im
Dictionary auch die Schlüssel verglichen. Kannst du vermeiden mit

from itertools import count
next_i = count().next
triples = sorted((value, next_i(), key) for (key, value) in d.iteritems())
pairs = [ (t[0], t[1]) for t in triples ]


Gruß,
Stefan