众所周知,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 | True) sorted(numbers,key=numbers.__getitem__,reverse= |
字典的key是数字或者字母的情况下对字典排序
1 | sorted(numbers,key=str.lower) |
我们定义一个新的字典
1 | 'January', month = dict(one= |
通过__getitem__
方法比较 我们定义的字典month中对应的值
1 | 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5} numbermap = { |
同样的原理,可以使用列表推导来实现排序
1 | for i in sorted(month,key=numbermap.__getitem__)] [month[i] |
定义一个方法来定义我们自己的排序规则
1 | def repeats(string): |
根据字母小写排序
1 | True) sorted(month.values(), key=repeats, reverse= |
使用lambda表达式排序
使用lambda表达式
1 | lambda x:x[1]) sorted(month.items(),key= |
1 | lambda x:x[0]) sorted(month.items(),key= |
其中:
- lambda x:x[1] 表明根据值排序
- lambda x:x[0] 表明根据键排序
以上就是python中对字典排序的一个总结,希望能帮到大家。