众所周知,python中字典是无序的,那么该如何对字典排序呢?
例如下面的字典:
1  | numbers = {'second': 2,'first': 1, 'third': 3, 'Fourth': 4}  | 
我们可以通过list()函数打印value,1
2>>>list(numbers)
['second', 'first', 'third', 'Fourth']
备注:
python3.6.4 以上的版本,字典根据插入的顺序自动排序
如何根据key 对字典排序
可以使用python的内置函数sorted 来对字典排序,如下面的代码
1  | sorted(numbers)  | 
结果有点差强人意,因为默认sorted函数是根据字母的顺序升序排列的,这里的字典中 key 恰好是字母,所以才会显示这个结果。
根据value对字典排序
用同样的方法,我们可以根据value来排序
1  | sorted(numbers.values())  | 
如何根据自定义的规则对字典排序
sorted函数还有一个可选参数叫key,注意这里的key和字典的key没有关系,根据指定的key 来进行排序,实现的机制类似迭代器。来看这个例子:
1  | sorted(numbers,key=numbers.__getitem__)  | 
这里我们使用了字典类中内置函数__getitem__ 在遍历字典值的过程中,获取对应的值来对字典排序
关于__getitem__ 函数的详细说明,请参考官方文档。
当然我们也可以使用列表推导的方式来进行排序(实质上是转化成了列表来进行排序)
1  | sorted(numbers,key=numbers.__getitem__,reverse=True)  | 
字典的key是数字或者字母的情况下对字典排序
1  | sorted(numbers,key=str.lower)  | 
我们定义一个新的字典
1  | month = dict(one='January',  | 
通过__getitem__方法比较 我们定义的字典month中对应的值
1  | numbermap = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}  | 
同样的原理,可以使用列表推导来实现排序
1  | [month[i] for i in sorted(month,key=numbermap.__getitem__)]  | 
定义一个方法来定义我们自己的排序规则
1  | def repeats(string):  | 
根据字母小写排序
1  | sorted(month.values(), key=repeats, reverse=True)  | 
使用lambda表达式排序
使用lambda表达式
1  | sorted(month.items(),key=lambda x:x[1])  | 
1  | sorted(month.items(),key=lambda x:x[0])  | 
其中:
- lambda x:x[1] 表明根据值排序
 - lambda x:x[0] 表明根据键排序
 
以上就是python中对字典排序的一个总结,希望能帮到大家。