Python根据字典值对字典进行排序的三种方法实例

 更新时间:2022年09月15日 11:04:55   作者:嵌入式技术  
Python中的字典是无序类型,没有自己的排序方法,下面这篇文章主要给大家介绍了关于Python根据字典值对字典进行排序的三种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、实际场景及解决思路

实际场景:比如某个班的数学成绩以字典格式存储为:

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) 

代码执行结果如下图所示:

总结 

到此这篇关于Python根据字典值对字典进行排序的三种方法的文章就介绍到这了,更多相关Python根据字典值对字典排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python使用docx模块读写docx文件的方法与docx模块常用方法详解

    python使用docx模块读写docx文件的方法与docx模块常用方法详解

    这篇文章主要介绍了python使用docx模块读写docx文件的方法与docx模块常用方法详解,需要的朋友可以参考下
    2020-02-02
  • Python下载网络小说实例代码

    Python下载网络小说实例代码

    这篇文章主要介绍了Python下载网络小说实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python数值求解微分方程方法(欧拉法,隐式欧拉)

    Python数值求解微分方程方法(欧拉法,隐式欧拉)

    这篇文章主要介绍了Python数值求解微分方程方法(欧拉法,隐式欧拉),文章围绕主题展开详细的内介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 解决os.path.isdir() 判断文件夹却返回false的问题

    解决os.path.isdir() 判断文件夹却返回false的问题

    今天小编就为大家分享一篇解决os.path.isdir() 判断文件夹却返回false的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python生成pdf文件的方法

    Python生成pdf文件的方法

    这篇文章主要介绍了Python生成pdf文件的方法,比较实用的功能,需要的朋友可以参考下
    2014-08-08
  • 详解python单例模式与metaclass

    详解python单例模式与metaclass

    这篇文章主要介绍了python单例模式与metaclass,文章介绍了单例模式的实现方式
    2016-01-01
  • python中pyplot直方图的绘制方式

    python中pyplot直方图的绘制方式

    这篇文章主要介绍了python中pyplot直方图的绘制方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 超级好用的4个Python命令行可视化库

    超级好用的4个Python命令行可视化库

    通常大家都是在自己的电脑上跑程序,直接是可以可视化相应的结果.如果是在服务器上的话,使用终端,是不太方便查看结果. 今天,小F就给大家介绍4个可以在命令行中使用的Python库. 分别是Bashplotlib、tqdm、PrettyTable、Colorama,需要的朋友可以参考下
    2021-06-06
  • python 模拟登陆github的示例

    python 模拟登陆github的示例

    这篇文章主要介绍了python 模拟登陆github的示例代码,帮助大家更好的理解和学习python 爬虫的相关知识,感兴趣的朋友可以了解下
    2020-12-12
  • 如何在Python中创建二叉树

    如何在Python中创建二叉树

    这篇文章主要介绍了如何在Python中创建二叉树,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03

最新评论