zhltom 发表于 2017-4-29 10:01:10

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

  Python中很长用的数据结构是dict,在使用的过程中总会遇到这样的问题:你想有序的遍历一个dict
  需求一,无序遍历dict中的内容,实现方式如下:

 1http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif#!/usr/local/bin/python
 2http://dreamstone.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://dreamstone.iteye.com/Images/OutliningIndicators/ContractedBlock.gifMAP_TEST = http://dreamstone.iteye.com/Images/dot.gif{
 3http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'a':'aa',
 4http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'b':'bb',
 5http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'c':'cc',           
 6http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'd':'dd',
 7http://dreamstone.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif}
 8http://dreamstone.iteye.com/Images/OutliningIndicators/None.gifdef main():
 9http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif   for i in MAP_TEST.keys():
10http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif      print i+":"+MAP_TEST
11http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif
12http://dreamstone.iteye.com/Images/OutliningIndicators/None.gifif __name__ == '__main__':
13http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif    main()
14http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif
  需求二,有序遍历dict中的内容,但dict是无序的,所以要实现只能用list过渡

 1http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif#!/usr/local/bin/python
 2http://dreamstone.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://dreamstone.iteye.com/Images/OutliningIndicators/ContractedBlock.gifMAP_TEST = http://dreamstone.iteye.com/Images/dot.gif{
 3http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'a':'aa',
 4http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'b':'bb',
 5http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'c':'cc',           
 6http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'd':'dd',
 7http://dreamstone.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif}
 8http://dreamstone.iteye.com/Images/OutliningIndicators/None.gifdef main():
 9http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif items = MAP_TEST.keys()
10http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif items.sort();
11http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif    for i in items:
12http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif       print i+":"+MAP_TEST
13http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif
14http://dreamstone.iteye.com/Images/OutliningIndicators/None.gifif __name__ == '__main__':
15http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif    main()
16http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif    
17http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif
18http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif
  需求三,按照自定义的顺序排列,实现如下,在sortfunc中实现你自己的排序方法
本例实现了倒序排列

 1http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif#!/usr/local/bin/python
 2http://dreamstone.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://dreamstone.iteye.com/Images/OutliningIndicators/ContractedBlock.gifMAP_TEST = http://dreamstone.iteye.com/Images/dot.gif{
 3http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'a':'aa',
 4http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'b':'bb',
 5http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'c':'cc',           
 6http://dreamstone.iteye.com/Images/OutliningIndicators/InBlock.gif            'd':'dd',
 7http://dreamstone.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif}
 8http://dreamstone.iteye.com/Images/OutliningIndicators/None.gifdef sortfunc(x,y):
 9http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif      return cmp(y,x);
10http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif   
11http://dreamstone.iteye.com/Images/OutliningIndicators/None.gifdef main():
12http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif   items = MAP_TEST.keys()
13http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif   items.sort(sortfunc);
14http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif   for i in items:
15http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif      print i+":"+MAP_TEST
16http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif
17http://dreamstone.iteye.com/Images/OutliningIndicators/None.gifif __name__ == '__main__':
18http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif    main()
19http://dreamstone.iteye.com/Images/OutliningIndicators/None.gif
20http://dreamstone.iteye.com/Images/OutliningIndicators/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
页: [1]
查看完整版本: Python 中dict的有序输出(排序)