[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