[Python-de] Dictionary sortieren???

Martin v. Löwis martin at v.loewis.de
Don Mai 29 20:55:34 EDT 2003


"Achim Domma \(ProCoders\)" <domma at procoders.net> writes:

> Bis hier hin war mir das alles klar. Nur frag' ich mich, ob dictionary
> __cmp__ nicht vieleicht implementiert? 

Tut es. Der tp_compare-Code für Dictionaries a,b geht so:

1. Sind die Längen verschieden? Wenn ja: cmp(len(a), len(b))
2. Wenn nicht: Finde den kleinsten Schlüssel ka in a, so dass
   b[ka] nicht existiert oder verschieden ist von a[ka]
3. Wenn kein solches ka existiert: die dictionaries sind
   gleich, Ergebnis ist 0
4. Finde den kleinsten Schlüssel kb in b, so dass a[kb] nicht
   existiert oder verschieden ist von ka.
5. Sind ka und kb verschieden? Wenn ja: cmp(ka, kb)
6. Wenn nicht: cmp(a[ka], a[kb])

Dieser Algorithmus hat u.a. folgende Eigenschaften
1. Gleiche Dictionaries (gleiche Schlüssel, gleiche Werte)
   liefern bei cmp 0.
2. Dictionaries werden primär nach Größe sortiert
3. Gleich große Dictionaries so verglichen, als ob die
   Aktionen

   aseq = a.items()
   aseq.sort()
   bseq = b.items()
   bseq.sort()
   return cmp(aseq, bseq)
   
   ausgeführt würden (zumindest ungefähr: verändert sich das
   Dictionary in Folge des Vergleichs, so weicht die Semantik
   von dieser hier ab)

Dieser Algorithmus ist nicht dokumentiert. Trotzdem ist er schon seit
etlichen Versionen in Verwendung, und wird sicher auch noch länger in
Verwendung bleiben.

Ciao,
Martin