Python中很長(zhǎng)用的數(shù)據(jù)結(jié)構(gòu)是dict,在使用的過(guò)程中總會(huì)遇到這樣的問(wèn)題:你想有序的遍歷一個(gè)dict
需求一,無(wú)序遍歷dict中的內(nèi)容,實(shí)現(xiàn)方式如下:
?1
#
!/
usr
/
local
/
bin
/
python
?2
MAP_TEST?
=
?
{
?3
????????????
'
a
'
:
'
aa
'
,
?4
????????????
'
b
'
:
'
bb
'
,
?5
????????????
'
c
'
:
'
cc
'
,???????????
?6
????????????
'
d
'
:
'
dd
'
,
?7
}
?8
def?main():
?9
???
for
?i?in?MAP_TEST.keys():
10
??????print?i
+
"
:
"
+
MAP_TEST[i]
11
12
if
?__name__?
==
?
'
__main__
'
:
13
????main()
14
?
需求二,有序遍歷dict中的內(nèi)容,但dict是無(wú)序的,所以要實(shí)現(xiàn)只能用list過(guò)渡
?1
#
!/
usr
/
local
/
bin
/
python
?2
MAP_TEST?
=
?
{
?3
????????????
'
a
'
:
'
aa
'
,
?4
????????????
'
b
'
:
'
bb
'
,
?5
????????????
'
c
'
:
'
cc
'
,???????????
?6
????????????
'
d
'
:
'
dd
'
,
?7
}
?8
def?main():
?9
?items?
=
?MAP_TEST.keys()
10
?items.sort();
11
????
for
?i?in?items:
12
???????print?i
+
"
:
"
+
MAP_TEST[i]
13
14
if
?__name__?
==
?
'
__main__
'
:
15
????main()
16
????
17
18
需求三,按照自定義的順序排列,實(shí)現(xiàn)如下,在sortfunc中實(shí)現(xiàn)你自己的排序方法
本例實(shí)現(xiàn)了倒序排列
?1
#
!/
usr
/
local
/
bin
/
python
?2
MAP_TEST?
=
?
{
?3
????????????
'
a
'
:
'
aa
'
,
?4
????????????
'
b
'
:
'
bb
'
,
?5
????????????
'
c
'
:
'
cc
'
,???????????
?6
????????????
'
d
'
:
'
dd
'
,
?7
}
?8
def?sortfunc(x,y):
?9
??????
return
?cmp(y,x);
10
???
11
def?main():
12
???items?
=
?MAP_TEST.keys()
13
???items.sort(sortfunc);
14
???
for
?i?in?items:
15
??????print?i
+
"
:
"
+
MAP_TEST[i]
16
17
if
?__name__?
==
?
'
__main__
'
:
18
????main()
19
20
說(shuō)明:
在不通過(guò)版本的python中dict的默認(rèn)順序是不同的,編碼時(shí),特別是修改或者二次開發(fā)的時(shí)候,
應(yīng)注意這個(gè)情況??赡軙?huì)造成bug
例如一下四個(gè)字段,在1.5? 2.2.3?? 2.4.3中排序不同,分別如下
1.5:
edifact
flat-encoded
vessel
flat-decoded
2.2.3:
flat-decoded
vessel
flat-encoded
edifact
Python 2.4.3
edifact
flat-decoded
flat-encoded
vessel