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

本文介绍了Python中字典的基本操作,重点讲解了如何按不同需求遍历字典,包括无序、有序及自定义顺序遍历的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

### 按键排序Python 中,可以通过 `sorted()` 函数对字典的键进行排序字典默认是无序的,因此对键排序是生成一个按顺序排列的键列表,然后根据该列表重新构造字典。 ```python dict1 = {"a": 3, "b": 1, "c": 2} sorted_keys = sorted(dict1.keys()) sorted_dict = {key: dict1[key] for key in sorted_keys} print(sorted_dict) ``` 输出结果为: ``` {'a': 3, 'b': 1, 'c': 2} ``` 上述方法通过获取字典的键列表并进行排序,然后按照排序后的键构建一个新的字典[^1]。 ### 按值排序字典按值排序,可以通过 `sorted()` 函数结合 `dict.items()` 方法实现。`dict.items()` 返回的是键值对元组列表,可以使用 `key` 参数指定按元组的哪一部分进行排序。 ```python dict1 = {"a": 3, "b": 1, "c": 2} sorted_items = sorted(dict1.items(), key=lambda x: x[1], reverse=True) sorted_dict = dict(sorted_items) print(sorted_dict) ``` 输出结果为: ``` {'a': 3, 'c': 2, 'b': 1} ``` 上述代码对字典按值进行降序排序,通过 `lambda x: x[1]` 指定按元组的第二个元素(即值)排序,并使用 `dict()` 将排序后的元组列表转换为字典[^2]。 ### 对键排序的扩展方法 除了直接对键进行排序,还可以通过 `collections.OrderedDict` 来实现排序后的字典结构,确保有序性在后续操作中保留。 ```python from collections import OrderedDict dict1 = {"a": 3, "b": 1, "c": 2} sorted_dict = OrderedDict(sorted(dict1.items())) print(dict(sorted_dict)) ``` 输出结果为: ``` {'a': 3, 'b': 1, 'c': 2} ``` `OrderedDict` 保留了排序后的键值对顺序,适用于需要保持排序状态的场景[^3]。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值