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

Python2中,字典dict)是一个无序的容器类型,它存储的是键值对(key-value)的数据。如果要按照自定义顺序对字典进行排序,需要进行以下步骤: 1. 创建一个带有自定义顺序的列表(List),用于指定键(key)的排序顺序。 2. 使用sorted()函数对字典的键进行排序,在排序的过程中,使用自定义顺序列表作为key参数的排序规则。 3. 创建一个新的有序字典(OrderedDict)。 4. 遍历排序后的键列表,从原始字典中取出对应的值,并将键值对逐个添加到有序字典中。 下面是一个简单的示例代码: ```python # 导入OrderedDict模块 from collections import OrderedDict # 定义自定义顺序列表 order = ["key3", "key1", "key2"] # 原始字典 my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"} # 对原始字典的键按照自定义顺序进行排序 sorted_keys = sorted(my_dict.keys(), key=lambda x: order.index(x)) # 创建一个新的有序字典 sorted_dict = OrderedDict() # 遍历排序后的键列表,从原始字典中取出对应的值,并将键值对添加到有序字典中 for key in sorted_keys: sorted_dict[key] = my_dict[key] # 打印有序字典 print(sorted_dict) ``` 运行以上代码,将按照自定义顺序对字典进行排序并打印结果。 注意:以上示例代码使用了collections模块中的OrderedDict类,因为Python2的普通字典是无序的,无法保证键的顺序。OrderedDict类是一个有序字典,可以按照添加顺序保持键的顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值