Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5096795
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: Python/Ruby

2011-02-17 01:37:51

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


阅读(2938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~