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