Was wäre ein schöner Weg von {2:3, 1:89, 4:5, 3:0}
zu {1:89, 2:3, 3:0, 4:5}
?
Ich habe einige Beiträge überprüft, aber alle verwenden den Operator "sortiert", der Tupel zurückgibt.
python
sorting
dictionary
Antonius
quelle
quelle
Antworten:
Standard-Python-Wörterbücher sind ungeordnet. Selbst wenn Sie die (Schlüssel-, Wert-) Paare sortieren würden, könnten Sie sie nicht so speichern
dict
, dass die Reihenfolge erhalten bleibt.Am einfachsten ist es
OrderedDict
, die Reihenfolge zu verwenden , in der die Elemente eingefügt wurden:Es ist egal, wie der Weg
od
ausgedruckt wird. es wird wie erwartet funktionieren:Python 3
Für Python 3-Benutzer muss Folgendes verwendet
.items()
werden.iteritems()
:quelle
sorted_dict = dict(sorted(unsorted_dict.items()))
Wörterbücher selbst haben keine Artikel als solche bestellt. Sollten Sie sie usw. in einer bestimmten Reihenfolge drucken möchten, finden Sie hier einige Beispiele:
In Python 2.4 und höher:
gibt:
(Python unter 2.4 :)
Quelle: http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/
quelle
for key, value in sorted(mydict.items())"
Aus der
collections
Bibliotheksdokumentation von Python :quelle
reverse=True
zBOrderedDict(sorted(d.items(), reverse=True, key=lambda t: t[0]))
Unexpected type(s): (List[str]) Possible types: (Mapping) (Iterable[Tuple[Any, Any]])
Für CPython / PyPy 3.6 und Python 3.7 oder höher ist dies problemlos möglich mit:
quelle
{key:d[key] for key in sorted(d.keys())}
Es gibt eine Reihe von Python-Modulen, die Wörterbuchimplementierungen bereitstellen, mit denen die Schlüssel automatisch in sortierter Reihenfolge verwaltet werden. Betrachten Sie das sortierte Container- Modul, bei dem es sich um reine Python- und Fast-as-C-Implementierungen handelt. Es gibt auch einen Leistungsvergleich mit anderen beliebten Optionen, die miteinander verglichen werden .
Die Verwendung eines geordneten Diktats ist eine unzureichende Lösung, wenn Sie ständig Schlüssel / Wert-Paare hinzufügen und entfernen müssen, während Sie gleichzeitig iterieren.
Der Typ SortedDict unterstützt auch die Suche und das Löschen indizierter Speicherorte, was mit dem integrierten Diktattyp nicht möglich ist.
quelle
Einfach:
Ausgabe:
quelle
sd
ist eine Liste von Tupeln, kein Wörterbuch. (Immer noch nützlich.)Wie andere bereits erwähnt haben, sind Wörterbücher von Natur aus ungeordnet. Wenn das Problem jedoch nur darin besteht , Wörterbücher in geordneter Weise anzuzeigen , können Sie die
__str__
Methode in einer Wörterbuchunterklasse überschreiben und diese Wörterbuchklasse anstelle der integrierten verwendendict
. Z.B.Beachten Sie, dass dies nichts daran ändert, wie die Schlüssel gespeichert sind, in welcher Reihenfolge sie wiedergegeben werden, wenn Sie sie durchlaufen usw., wie sie mit
print
oder an der Python-Konsole angezeigt werden .quelle
Einen anderen Weg gefunden:
upd:
1. Dadurch werden auch verschachtelte Objekte sortiert (danke @DanielF).
2. Python-Wörterbücher sind ungeordnet, daher kann dies nur gedruckt oder str zugewiesen werden.
quelle
In Python 3.
gibt
quelle
Das Python-Wörterbuch war vor Python 3.6 ungeordnet. In der CPython-Implementierung von Python 3.6 behält das Wörterbuch die Einfügereihenfolge bei. Ab Python 3.7 wird dies zu einer Sprachfunktion.
Im Änderungsprotokoll von Python 3.6 ( https://docs.python.org/3.6/whatsnew/3.6.html#whatsnew36-compactdict ):
Im Dokument von Python 3.7 ( https://docs.python.org/3.7/tutorial/datastructures.html#dictionaries ):
Im Gegensatz zu früheren Versionen können Sie ein Diktat nach Python 3.6 / 3.7 sortieren. Wenn Sie ein verschachteltes Diktat einschließlich des darin enthaltenen Unterdiktats sortieren möchten, haben Sie folgende Möglichkeiten:
https://gist.github.com/ligyxy/f60f0374defc383aa098d44cfbd318eb
quelle
Hier habe ich eine einfachste Lösung gefunden, um das Python-Diktat nach Schlüssel zu sortieren
pprint
. z.B.Bei Verwendung von pprint wird jedoch ein sortiertes Diktat zurückgegeben
quelle
Es gibt eine einfache Möglichkeit, ein Wörterbuch zu sortieren.
Nach Ihrer Frage,
Die Lösung ist :
(Wobei c der Name Ihres Wörterbuchs ist.)
Dieses Programm gibt folgende Ausgabe aus:
wie du wolltest.
Ein weiteres Beispiel ist:
Gibt die Ausgabe:
['Albert', 'Bill', 'John', 'Lucy', 'Peter']
Gibt die Ausgabe:
[18, 24, 32, 36, 41]
Gibt die Ausgabe:
Wenn Sie es also in Schlüssel, Werte und Elemente ändern, können Sie wie gewünscht drucken. Hoffentlich hilft das!
quelle
Erzeugt genau das, was Sie wollen:
Dies ist jedoch nicht der richtige Weg, da dies ein unterschiedliches Verhalten mit verschiedenen Wörterbüchern zeigen kann, das ich kürzlich gelernt habe. Daher hat Tim In der Antwort auf meine Anfrage, die ich hier teile, einen perfekten Weg vorgeschlagen.
quelle
Ich denke, das Einfachste ist, das Diktat nach Schlüssel zu sortieren und das sortierte Schlüssel-Wert-Paar in einem neuen Diktat zu speichern.
Um es klarer zu machen:
quelle
Sie können ein neues Wörterbuch erstellen, indem Sie das aktuelle Wörterbuch nach Schlüssel gemäß Ihrer Frage sortieren.
Dies ist dein Wörterbuch
Erstellen Sie ein neues Wörterbuch d1, indem Sie dieses d mit der Lambda-Funktion sortieren
d1 sollte {1: 89, 2: 3, 3: 0, 4: 5} sein und nach den Schlüsseln in d sortiert sein.
quelle
Python-Diktate sind nicht geordnet. Normalerweise ist dies kein Problem, da der häufigste Anwendungsfall darin besteht, eine Suche durchzuführen.
Der einfachste Weg, um das zu tun, was Sie wollen, besteht darin,
collections.OrderedDict
die Elemente in sortierter Reihenfolge einzufügen.Wenn Sie iterieren müssen, wie andere oben vorgeschlagen haben, besteht der einfachste Weg darin, über sortierte Schlüssel zu iterieren. Beispiele-
Druckwerte sortiert nach Schlüsseln:
Liste der nach Schlüsseln sortierten Werte abrufen:
quelle
for k,value in sorted(d.items()):
ist besser: vermeidet den erneuten Zugriff auf das Diktat per Schlüssel in der SchleifeIch habe eine einzeilige Diktatsortierung.
Hoffe das wird hilfreich sein.
quelle
Diese Funktion sortiert jedes Wörterbuch rekursiv nach seinem Schlüssel. Das heißt, wenn ein Wert im Wörterbuch auch ein Wörterbuch ist, wird auch dieser nach seinem Schlüssel sortiert. Wenn Sie mit CPython 3.6 oder höher arbeiten, kann eine einfache Änderung vorgenommen werden, um ein
dict
anstelle einesOrderedDict
zu verwenden.quelle
Leute, du machst die Dinge kompliziert ... es ist wirklich einfach
Die Ausgabe ist:
quelle
Die einfachste Lösung besteht darin, dass Sie eine Liste mit Diktatschlüsseln in sortierter Reihenfolge erhalten und dann über Diktat iterieren. Zum Beispiel
Es folgt die Ausgabe (absteigende Reihenfolge)
quelle
Ein einfacher Weg, dies zu tun:
quelle
Ein zeitlicher Vergleich der beiden Methoden in 2.7 zeigt, dass sie praktisch identisch sind:
quelle
quelle
quelle
Oder verwenden Sie
pandas
,Demo:
Sehen:
quelle
Mein Vorschlag ist folgender: Sie können ein Diktat sortieren oder ein Diktat sortieren, während Sie Elemente hinzufügen, und müssen möglicherweise in Zukunft Elemente hinzufügen:
Bauen Sie eine
dict
von Grund auf neu. Haben Sie eine zweite Datenstruktur, eine Liste, mit Ihrer Liste der Schlüssel. Das Halbierungspaket verfügt über eine Insort-Funktion, mit der Sie eine Liste sortieren oder Ihre Liste sortieren können, nachdem Sie Ihr Diktat vollständig ausgefüllt haben. Wenn Sie nun Ihr Diktat durchlaufen, durchlaufen Sie stattdessen die Liste, um in der richtigen Reihenfolge auf jeden Schlüssel zuzugreifen, ohne sich um die Darstellung der Diktatstruktur zu kümmern (die nicht zum Sortieren vorgesehen ist).quelle
quelle