Python根据字典值对字典进行排序的三种方法实例
作者:嵌入式技术 发布时间:2022-07-29 16:24:21
一、实际场景及解决思路
实际场景:比如某个班的数学成绩以字典格式存储为:
student_dict = {
'xiaoliang': 81,
'xiaowang' : 92,
'xiaoxin' : 99,
......
}
实际字典存储是随机排序的,本文给出根据每个学生的成绩对学生字典格式数据进行排序,并将排序结果返回给字典中的解决方法。
解决思路:将字典中的元素转换为元组,使用内置函数sorted
排序。由于Python内置方法sorted
并不能直接对字典进行操作,所以需要首先将字典格式数据转换为元组列表数据格式,然后使用sorted
进行排序,常用的方法包括三种:
方法1:使用列表解析方法实现
方法2(推荐):使用
zip
方法实现方法3(高级用法):传递
sorted
函数的key
参数
二、字典排序的三种实现方法
2.1 使用列表解析方法实现字典排序
方案1:使用列表解析方法实现
(1)使用列表解析方法将字典中的像转化为
(value, key)
的元组格式,然后使用sorted
方法实现排序;
(2)注意:元组比较大小是根据第一个元素value
决定的输出的真假,当第一个元素value
相同时候,才比较第二个,依次类推。
Python代码如下所示:
from random import randint
# 1.创建一个包含20个学生名及成绩的字典创建方法
student_dict = {'student_%d' % i: randint(50, 100)
for i in range(1, 21)}
# 2.使用列表解析方法将学生字典转换为(value, key)的元组格式
student_tuplelist = [(stu_value, stu_key) for stu_key, stu_value
in student_dict.items()]
# 查看以下转换后的效果
print(student_tuplelist)
# 3.使用sorted函数对元组列表student_list由分数高低进行排序
student_tuplelist_sorted = sorted(student_tuplelist,
reverse=True)
# 输出结果:
print(student_tuplelist_sorted)
代码执行结果如下图所示:
2.2 使用zip方法实现字典排序
(1)使用
zip
方法将字典中的像转化为(value, key)
的元组格式,然后使用sorted
方法实现排序;
(2)注意zip
的输出为一个zip对象(zip object),需要使用列表构造器list
才能转换为元组列表;
(3)结合下图zip
函数的功能,使用zip
将学生字典转换为元组列表的方法为:list(zip(student_dict.values(), student_dict.keys()))
。
Python代码如下所示:
from random import randint
# 1.创建一个包含20个学生名及成绩的字典创建方法
student_dict = {'student_%d' % i: randint(50, 100)
for i in range(1, 21)}
# 2.使用zip方法将学生字典转换为(value, key)的元组格式
student_tuplelist = list(zip(student_dict.values(),
student_dict.keys()))
# 查看以下转换后的效果
print(student_tuplelist)
# 3.使用sorted函数对元组列表student_list由分数高低进行排序
student_tuplelist_sorted = sorted(student_tuplelist,
reverse=True)
# 输出结果:
print(student_tuplelist_sorted)
2.3 使用传递sorted函数的key参数实现字典排序
(1)由于
sorted
方法有一个key
参数,它可以指定排序对象是按照字典哪类元素(键值或者值)进行排序;
(2)需要注意的是对于key
参数我们需要使用lambda
匿名函数作为迭代器key=lambda x: x[1]
,依次访问学生字典的值;sorted
函数的学生字典传入方法为student_dict.items()
。
(3)使用sorted函数的key参数对字典数据进行排序,代码显得更加简洁。
Python实现代码如下所示:
from random import randint
# 1.创建一个包含20个学生名及成绩的字典创建方法
student_dict = {'student_%d' % i: randint(50, 100)
for i in range(1, 21)}
# 2.传递`sorted`函数的`key`参数实现学生字典数据的排序
student_tuplelist_sorted = sorted(student_dict.items(),
key=lambda x: x[1], reverse=True)
# 3.输出结果
print(student_tuplelist_sorted)
三、将sorted排序的列表返回给字典
上面三种方案对学生字典数据进行排序后返回的是一个元素为元组的列表,而如果我们需要的还是字典格式,可以使用python的内置函数enumerate
实现。对返回的元组列表排序结果使用enumerate
后的输出为一个枚举对象(enumerate object),结果如下图所示:
这里需要使用列表生成器list(enumerate(student_tuplelist_sorted, 1))
读取其中的元素,其中参数1
表示初始标号为1,输出结果如下图所示:
由上图可以看出,enumerate
函数的输出元组列表格式为(序号, ('student_x', 考试分数))
。使用for
循环可以依次读取enumerate
中的内容,并重新构建学生字典。代码如下所示:
from random import randint
# 1.创建一个包含20个学生名及成绩的字典创建方法
student_dict = {'student_%d' % i: randint(50, 100)
for i in range(1, 21)}
# 2.使用传递`sorted`函数的`key`参数的方法对字典进行排序
student_tuplelist_sorted = sorted(student_dict.items(),
key=lambda x: x[1], reverse=True)
# 3.使用for循环结合内置函数enumerate重新构建排序后的字典:
student_dict_sorted = {}
for rank, (stu_key, stu_val) in enumerate(
student_tuplelist_sorted, 1):
# 重新构造带有排名的排序后的学生字典student_dict_sorted
student_dict_sorted[stu_key] = (rank, stu_val)
# 4.查看结果
print("带有名次的排序后学生字典:", student_dict_sorted)
代码执行结果如下图所示:
总结
来源:https://blog.csdn.net/weixin_37926734/article/details/124028703


猜你喜欢
- 上一篇:微软建议的ASP性能优化28条守则(6) 技巧 20:避免在循环语句中使用字符串串联 许多人在循环语句中建立一个字符串,如下所示:
- 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS
- A Process Control System 使用b/s架构、运行在类Unix系统上一个进程监控管理系统它可以使进程以daemon方式运
- 如下所示:# -*- coding: utf-8 -*-# @Time : 2018/1/17 16:37# @Author :
- base64模块是用来作base64编码解码的。这种编码方式在电子邮件中是很常见的。它可以把不能作为文本显示的二进制数据编码为可显示的文本信
- 一行拆分成多行1.根据某一列拆分效果:代码:if __name__ == '__main__':
- 首先要把php_iconv.dll和inconv.dll COPY到c:\winnt\system32下,直接上代码:<?define
- dataclass简介dataclass的定义位于PEP-557,根据定义一个dataclass是指“一个带有默认值的可变的namedtup
- 本文实例讲述了js树插件zTree获取所有选中节点数据的方法。分享给大家供大家参考。具体分析如下:由于刚接触Tree方面的东西。在网上看到了
- 昨天写了一段用来做分层随机抽样的代码,很粗糙,不过用公司的2万名导购名单试了一下,结果感人,我觉得此刻的我已经要上天了,哈哈哈哈哈哈代码如下
- 一、if语句if 语句让你能够检查程序的当前状态,并据此采取相应的措施。if语句可应用于列表,以另一种方式处理列表中的大多数元素,以及特定值
- 1、远程登录到linux上,使用到的模块paramiko#远程登陆操作系统def ssh(sys_ip,username,password,
- help函数是python的一个内置函数(python的内置函数可以直接调用,无需import),它是python自带的函数,任何时候都可以
- 背景上周公司培训了MySQL replication, 这个周末打算用所学来实践操作一下。Master server:MySQL conta
- 效果图基本思路在 OpenCV 中使用VideoCapture方法初始化视频渲染对象创建灰度图像导入预训练模型,识别脸部和人脸标志计算上唇和
- vue3使用computed获取vuex里数据不再是vue2.0里什么mapGetter,mapState那些复杂的获取方式,vue3.0里
- 本文实例讲述了Python多线程应用于自动化测试操作。分享给大家供大家参考,具体如下:多线程执行测试用例实例:import threadin
- 本文实例讲述了Python实现批量读取word中表格信息的方法。分享给大家供大家参考。具体如下:单位收集了很多word格式的调查表,领导需要
- 1、ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值。 2、同一个的class选择符可以在一个
- 前言由于项目中需要带字的toggle滑动组件,而ionic提供的是这样的:实际项目中需要这样子的:在网上找了下其他的实现,感觉没得类似的,也