Python中很長用的數據結構是dict,在使用的過程中總會遇到這樣的問題:你想有序的遍歷一個dict
需求一,無序遍歷dict中的內容,實現方式如下:
?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中的內容,但dict是無序的,所以要實現只能用list過渡
?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
需求三,按照自定義的順序排列,實現如下,在sortfunc中實現你自己的排序方法
本例實現了倒序排列
?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
說明:
在不通過版本的python中dict的默認順序是不同的,編碼時,特別是修改或者二次開發的時候,
應注意這個情況。可能會造成bug
例如一下四個字段,在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