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