Wie könnte man von "{2:3, 1:89, 4:5, 3:0}" zu "{1:89, 2:3, 3:0, 4:5}" übergehen?
Ich habe mir einige Beiträge angesehen, aber sie alle verwenden den "sort" Operator, der Tupel zurückgibt.
Standard-Python-Dictionaries sind ungeordnet. Selbst wenn Sie die (Schlüssel-Wert)-Paare sortieren würden, wären Sie nicht in der Lage, sie in einem "Dict" so zu speichern, dass die Reihenfolge beibehalten würde.
Der einfachste Weg ist die Verwendung von OrderedDict
, das sich die Reihenfolge merkt, in der die Elemente eingefügt worden sind:
In [1]: import collections
In [2]: d = {2:3, 1:89, 4:5, 3:0}
In [3]: od = collections.OrderedDict(sorted(d.items()))
In [4]: od
Out[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])
Es ist egal, wie od
ausgedruckt wird; es wird wie erwartet funktionieren:
In [11]: od[1]
Out[11]: 89
In [12]: od[3]
Out[12]: 0
In [13]: for k, v in od.iteritems(): print k, v
....:
1 89
2 3
3 0
4 5
Für Python 3 Benutzer muss man .items()
anstelle von .iteritems()
verwenden:
In [13]: for k, v in od.items(): print(k, v)
....:
1 89
2 3
3 0
4 5
In Wörterbüchern selbst gibt es keine geordneten Einträge, sollten Sie sie jedoch in einer bestimmten Reihenfolge ausdrucken wollen, finden Sie hier einige Beispiele:
In Python 2.4 und höher:
mydict = {'carl':40,
'alan':2,
'bob':1,
'danny':3}
for key in sorted(mydict):
print "%s: %s" % (key, mydict[key])
gibt:
alan: 2
bob: 1
carl: 40
danny: 3
(Python unter 2.4:)
keylist = mydict.keys()
keylist.sort()
for key in keylist:
print "%s: %s" % (key, mydict[key])
Quelle: http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/
Wie andere bereits erwähnt haben, sind Wörterbücher von Natur aus ungeordnet. Wenn es jedoch nur darum geht, Wörterbücher geordnet anzuzeigen, können Sie die Methode __str__
in einer Wörterbuchunterklasse überschreiben und diese Wörterbuchklasse anstelle des eingebauten dict
verwenden. Beispiel.
class SortedDisplayDict(dict):
def __str__(self):
return "{" + ", ".join("%r: %r" % (key, self[key]) for key in sorted(self)) + "}"
>>> d = SortedDisplayDict({2:3, 1:89, 4:5, 3:0})
>>> d
{1: 89, 2: 3, 3: 0, 4: 5}
Beachten Sie, dass dies nichts daran ändert, wie die Schlüssel gespeichert werden, in welcher Reihenfolge sie zurückkommen, wenn Sie über sie iterieren usw., nur wie sie mit print
oder auf der Python-Konsole angezeigt werden.