Python 中dict的有序输出(排序)

Python中很长用的数据结构是dict,在使用的过程中总会遇到这样的问题:你想有序的遍历一个dict

需求一,无序遍历dict中的内容,实现方式如下:

 1 None.gif # !/ usr / local / bin / python
 2 ExpandedBlockStart.gifContractedBlock.gifMAP_TEST  =   dot.gif {
 3 InBlock.gif             ' a ' : ' aa ' ,
 4 InBlock.gif             ' b ' : ' bb ' ,
 5 InBlock.gif             ' c ' : ' cc ' ,           
 6 InBlock.gif             ' d ' : ' dd ' ,
 7 ExpandedBlockEnd.gif}

 8 None.gifdef main():
 9 None.gif    for  i in MAP_TEST.keys():
10 None.gif      print i + " : " + MAP_TEST[i]
11 None.gif
12 None.gif if  __name__  ==   ' __main__ ' :
13 None.gif    main()
14 None.gif

 

需求二,有序遍历dict中的内容,但dict是无序的,所以要实现只能用list过渡

 1 None.gif # !/ usr / local / bin / python
 2 ExpandedBlockStart.gifContractedBlock.gifMAP_TEST  =   dot.gif {
 3 InBlock.gif             ' a ' : ' aa ' ,
 4 InBlock.gif             ' b ' : ' bb ' ,
 5 InBlock.gif             ' c ' : ' cc ' ,           
 6 InBlock.gif             ' d ' : ' dd ' ,
 7 ExpandedBlockEnd.gif}
 8 None.gifdef main():
 9 None.gif items  =  MAP_TEST.keys()
10 None.gif items.sort();
11 None.gif     for  i in items:
12 None.gif       print i + " : " + MAP_TEST[i]
13 None.gif
14 None.gif if  __name__  ==   ' __main__ ' :
15 None.gif    main()
16 None.gif    
17 None.gif
18 None.gif

需求三,按照自定义的顺序排列,实现如下,在sortfunc中实现你自己的排序方法
本例实现了倒序排列

 1 None.gif # !/ usr / local / bin / python
 2 ExpandedBlockStart.gifContractedBlock.gifMAP_TEST  =   dot.gif {
 3 InBlock.gif             ' a ' : ' aa ' ,
 4 InBlock.gif             ' b ' : ' bb ' ,
 5 InBlock.gif             ' c ' : ' cc ' ,           
 6 InBlock.gif             ' d ' : ' dd ' ,
 7 ExpandedBlockEnd.gif}
 8 None.gifdef sortfunc(x,y):
 9 None.gif       return  cmp(y,x);
10 None.gif   
11 None.gifdef main():
12 None.gif   items  =  MAP_TEST.keys()
13 None.gif   items.sort(sortfunc);
14 None.gif    for  i in items:
15 None.gif      print i + " : " + MAP_TEST[i]
16 None.gif
17 None.gif if  __name__  ==   ' __main__ ' :
18 None.gif    main()
19 None.gif
20 None.gif


说明:
在不通过版本的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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值