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