Die einzigen Methoden, die ich gefunden habe, funktionieren für Python2 oder geben nur eine Liste von Tupeln zurück.
Ist es möglich, das Wörterbuch beispielsweise {"aa": 3, "bb": 4, "cc": 2, "dd": 1}
nach seinen Werten zu sortieren ?
Die Reihenfolge des sortierten Wörterbuchs, das ich erreichen möchte, ist vom größten zum kleinsten. Ich möchte, dass die Ergebnisse so aussehen:
bb 4
aa 3
cc 2
dd 1
Und nach dem Sortieren möchte ich es in einer Textdatei speichern.
quelle
[x for x in iterable]
ist ein Python-Listenverständnis (Google), das in Python zum Erstellen von Listen sehr verbreitet und effizient ist.(k, d[k])
ist ein Tupel mit zwei Elementen, das zweite Element (d[k]
) ist der Wert aus dem Wörterbuch.sorted()
ist eine integrierte Funktion, die die nach den Werten sortierten Schlüssel des Wörterbuchs zurückgibt. Verwenden Siekey=d.get
es den Schlüssel meiner Antwort, der nicht trivial zu wissen ist. Es ist wichtig, die eingebauten Funktionen zu kennen. Ich hoffe das hat geholfen.[x for x in iterable]
"Listenverständnis" fehlte im Einführungskurs. Lesen Sie jetzt darüber (war schwer zu finden, den Namen nicht zu kennen).from collections import OrderedDict from operator import itemgetter d = {"aa": 3, "bb": 4, "cc": 2, "dd": 1} print(OrderedDict(sorted(d.items(), key = itemgetter(1), reverse = True)))
druckt
OrderedDict([('bb', 4), ('aa', 3), ('cc', 2), ('dd', 1)])
Obwohl aus Ihrem letzten Satz hervorgeht, dass eine Liste von Tupeln gut funktionieren würde, z
from operator import itemgetter d = {"aa": 3, "bb": 4, "cc": 2, "dd": 1} for key, value in sorted(d.items(), key = itemgetter(1), reverse = True): print(key, value)
welche druckt
bb 4 aa 3 cc 2 dd 1
quelle
dict
behält jetzt die Einfügereihenfolge bei, daher gibt es keinen Grund zur VerwendungOrderedDict
Mit einem Wörterbuchverständnis können Sie nach Werten in umgekehrter Reihenfolge (größte bis kleinste) sortieren :
{k: d[k] for k in sorted(d, key=d.get, reverse=True)} # {'b': 4, 'a': 3, 'c': 2, 'd': 1}
Wenn Sie nach Werten in aufsteigender Reihenfolge sortieren möchten (kleinste bis größte)
{k: d[k] for k in sorted(d, key=d.get)} # {'d': 1, 'c': 2, 'a': 3, 'b': 4}
Wenn Sie nach den Schlüsseln in aufsteigender Reihenfolge sortieren möchten
{k: d[k] for k in sorted(d)} # {'a': 3, 'b': 4, 'c': 2, 'd': 1}
Dies funktioniert unter CPython 3.6+ und jeder Implementierung von Python 3.7+, da Wörterbücher die Einfügereihenfolge beibehalten.
quelle
Eine andere Möglichkeit besteht darin, einen Lambda-Ausdruck zu verwenden. Abhängig von der Interpreter-Version und davon, ob Sie ein sortiertes Wörterbuch oder sortierte Schlüsselwert-Tupel erstellen möchten (wie dies beim OP der Fall ist), ist dies möglicherweise sogar schneller als die akzeptierte Antwort.
d = {'aa': 3, 'bb': 4, 'cc': 2, 'dd': 1} s = sorted(d.items(), key=lambda x: x[1], reverse=True) for k, v in s: print(k, v)
quelle
print(s)
anstelle einer Schleife tun :)dict
s Ordnung in allen Pythons beginnend mit 3.7Um das Wörterbuch zu sortieren, könnten wir ein Operatormodul verwenden. Hier ist die Dokumentation des Bedienermoduls.
import operator #Importing operator module dc = {"aa": 3, "bb": 4, "cc": 2, "dd": 1} #Dictionary to be sorted dc_sort = sorted(dc.items(),key = operator.itemgetter(1),reverse = True) print dc_sort
Die Ausgabesequenz ist eine sortierte Liste:
[('bb', 4), ('aa', 3), ('cc', 2), ('dd', 1)]
Wenn wir nach Schlüsseln sortieren wollen, können wir davon Gebrauch machen
dc_sort = sorted(dc.items(),key = operator.itemgetter(0),reverse = True)
Die Ausgabesequenz lautet:
[('dd', 1), ('cc', 2), ('bb', 4), ('aa', 3)]
quelle
Um ein Wörterbuch zu sortieren und es anschließend als Wörterbuch zu verwenden, können Sie OrderedDict aus der Standardbibliothek verwenden.
Wenn Sie dies nicht benötigen, empfehlen wir Ihnen, die Sortierfunktionen zu überdenken, die Ihnen eine Liste mit Tupeln hinterlassen. Welche Ausgabe wollten Sie, wenn nicht eine geordnete Liste von Schlüssel-Wert-Paaren (Tupeln)?
quelle
dict
behält jetzt die Einfügereihenfolge bei, daher gibt es keinen Grund zur VerwendungOrderedDict