2012-04-04 9 views
4

Also ich habe ein kleines Problem. Ich habe hier vor einiger Zeit Hilfe bekommen über das Sortieren eines Wörterbuchs mit Schlüsseln, die eine Liste zu jedem Schlüssel haben, entsprechend dem Wert der Dinge in der Liste. Die Tasten mit Listen mit der geringsten Anzahl von Werten links und rechts die Tasten mit Listen mit den meisten Werten. Das hat super funktioniert. Jetzt weiß ich, wie man Wörterbuchschlüssel alphabetisch sortiert, aber ich kann es nicht in Verbindung mit dem oben genannten bekommen.Sortiere ein Wörterbuch nach der Listengröße und dann alphabetisch nach seinem Schlüssel in Python?

Ich versuche, das Wörterbuch unten zu sortieren, zuerst wie viele Werte die Schlüsselliste enthält ... und dann alphabetisch, wenn die Schlüsselliste die gleiche Anzahl von Werten wie eine vorherige Schlüsselliste enthält.

so, bevor ich hätte dies:

Dict = {"anna":[1,2,3],"billy":[1,2],"cilla":[1,2,3,4],"cecillia":[1,2,3,4],"dan":[1]}

Und nach, wenn alles gut geht, würde ich gerne haben ...

Dict = {"dan":[1],"billy":[1,2],"anna":[1,2,3],"cecillia":[1,2,3,4],"cilla":[1,2,3,4]}

Wie Sie in der oben zu sehen, cecillia kommt vor cilla, da sie beide 4 Werte in ihren Listen haben ... und dan kommt zuerst, da er die geringste Menge an Werten in seiner Liste hat. Ich hoffe das macht Sinn. Was habe ich jetzt das unten stehende Ergebnis zu erhalten ist:

ascending = sorted(Dict, key =lambda x: len(Dict[x]))

das gibt mir zum Beispiel:

{"dan":[1],"billy":[1,2],"anna":[1,2,3],"cilla":[1,2,3,4],"cecillia":[1,2,3,4]}

So funktioniert es aber nur für die Werte in der Liste .. jetzt wenn ich

ascending.sort()

es gehen sortiert das Wörterbuch alphabetisch Verbündeter aber dann ist die Reihenfolge der Werte vom kleinsten zum größten verschwunden. Kann jemand die zwei Dinge kombinieren? Ich würde es sehr begrüßen.

Antwort

4

Sie können nicht Wörterbücher sortiert halten, so dass Sie es auf eine Liste von Tupeln konvertieren müssen:

D = [ (x, Dict[x]) for x in Dict] 
ascending = sorted(D, key = lambda x: x[1]) 
ascending.sort() 

http://wiki.python.org/moin/HowTo/Sorting See. Übrigens ist die Funktion, auf die Sie sich verlassen, in der Tat, weil der Sortieralgorithmus stable10 ist (was offensichtlich nicht der Fall war, als ich in Python programmiert habe).

Verwandte Themen