如何根据字典中值的大小,对字典中的项排序

来源:互联网 发布:java兰陵王破解版 编辑:程序博客网 时间:2024/06/11 19:38
实际案例

某班英语成绩以字典形式存储为{‘Li’:79, ‘Jim’:88, ‘Lucy’:92, …},根据成绩高低,计算学生排名。

这里我们将利用内置函数sorted对学生的英语成绩排名。

方法一:

首先,我们利用zip()将字典转化为元组;然后,我们调用sorted函数对元组进行排序,代码如下:

# -*- coding: utf-8 -*-from random import randintstudent = {k: randint(0, 100) for k in "qazwsx"}# 将字典转为元组stu = zip(student.values(), student.keys())print sorted(stu)

其运行结果如下:
[(1, 'x'), (3, 's'), (40, 'w'), (41, 'a'), (78, 'q'), (90, 'z')]

方法二:

我们利用sorted函数中key这个参数,对字典进行排序。看到这里有没有想起我们上一篇文章中根据值对字典的元素进行从大到小的排序呢?不错,这里我们将使用上一篇文章所使用的方法对字典排序,代码如下:

# -*- coding: utf-8 -*-from random import randintstudent = {k: randint(0, 100) for k in "qazwsx"}print sorted(student.items(), key=lambda v: v[1])

其运行结果如下:
[('x', 1), ('s', 3), ('w', 40), ('a', 41), ('q', 78), ('z', 90)]

参数说明:
  • items()可将字典中的每个键值对转换成一个一个的元组,并将这些元组组合成一个list。
  • key值的传入,我们这里使用匿名函数lambda,利用这个函数,我们可以对字典进行按键、按值排序,即v[0]则为按键排序,v[1]则为按值排序。

简书个人主页:http://www.jianshu.com/u/766a46e00f6b