[Python-de] Dictionary sortieren
Stefan Behnel
behnel_ml at gkec.informatik.tu-darmstadt.de
Sam Nov 5 18:15:57 CET 2005
Stefan Behnel schrieb:
> 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 ]
Der Schönheit halber noch einer, diesmal anders herum:
.>>> d = {1:10, 2:0, 3:5}
.>>> from operator import itemgetter
.>>> sorted(d.iteritems(), key=itemgetter(1))
[(2, 0), (3, 5), (1, 10)]
Gruß,
Stefan