Kāds būtu labs veids, kā no {2:3, 1:89, 4:5, 3:0}
pāriet uz {1:89, 2:3, 3:0, 4:5}
?
Es pārbaudīju dažus ziņojumus, bet visos tajos ir izmantots "sorted" operators, kas atgriež tuples.
Standarta Python vārdnīcas nav sakārtotas. Pat ja jūs sakārtotu (atslēga,vērtība) pārus, jūs nevarētu tos saglabāt dict
tādā veidā, lai saglabātu sakārtojumu.
Visvienkāršākais veids ir izmantot OrderedDict
, kas atceras, kādā secībā elementi ir ievietoti:
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)])
Nepievērsiet uzmanību tam, kā tiek izdrukāts od
; tas darbosies, kā paredzēts:
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
Python 3 lietotājiem ir jāizmanto .items()
, nevis .iteritems()
:
In [13]: for k, v in od.items(): print(k, v)
....:
1 89
2 3
3 0
4 5
Pašām vārdnīcām kā tādām nav sakārtotu elementu, ja vēlaties tos izdrukāt utt., lai tos sakārtotu, šeit ir daži piemēri:
Python 2.4 un jaunākās versijās:
mydict = {'carl':40,
'alan':2,
'bob':1,
'danny':3}
for key in sorted(mydict):
print "%s: %s" % (key, mydict[key])
dod:
alan: 2
bob: 1
carl: 40
danny: 3
(Python zem 2.4:)
keylist = mydict.keys()
keylist.sort()
for key in keylist:
print "%s: %s" % (key, mydict[key])
Avots: http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/
Kā jau citi ir minējuši, vārdnīcas pēc būtības nav sakārtotas. Tomēr, ja runa ir tikai par vārdnīcu parādīšanu sakārtotā veidā, jūs varat pārtaisīt __str__
metodi vārdnīcas apakšklasē un izmantot šo vārdnīcu klasi, nevis iebūvēto dict
. Piem.
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}
Ņemiet vērā, ka tas neko nemaina attiecībā uz to, kā atslēgas tiek saglabātas, kādā secībā tās atgriezīsies, kad tās iterēsiet utt., tikai to, kā tās tiks parādītas ar print
vai python konsoles palīdzību.