python字典、列表排序,从简单到复杂

news2024/11/20 21:36:01

因工作原因,需要频繁对python字典(dict)、列表(list)等进行各种各样的排序,发现网上这块的资料又多又杂,尤其涉及到lambda的,让人觉得难以理解看不下去,因此写了这篇文章,从简单到复杂,配合例子一点点讲解对字典、列表的各种排序,并按照自己的理解对lambda表达式进行了解释

下面的例子,本质都是借用python自带函数sorted或sort来实现的,复杂点的排序需要配合lambda表达式,只要狠下心去看,其实没那么难

一、简单排序 

# 列表
tmp = [5,2,3,1,4]
# 使用sorted排序列表
print(sorted(tmp))
# 使用列表的sort函数排序
tmp.sort()
print(tmp)

# 字典
tmp = {"a":1,"c":4,"b":2,"d":3}
# 按照key值排序字典
print(dict(sorted(tmp.items(),key = lambda item:item[0])))
# 按照value值排序字典
print(dict(sorted(tmp.items(),key = lambda item:item[1])))

打印结果为:

解释:

list.sort()方法是列表特有的,而sorted函数用于任何可迭代对象的排序

以dict(sorted(tmp.items(),key = lambda item:item[0]))为例解释,tmp.items()将tmp转成可迭代对象[('a', 1), ('c', 4), ('b', 2), ('d', 3)],也就是将字典的key和value转成了元组,key = lambda item:item[0]的意思是选取元组的第一个元素作为比较对象,也即按照字典的key值排序,排序完成后的结果为[('a', 1), ('b', 2), ('c', 4), ('d', 3)],是列表,再使用dict()转回成字典。

如果想sorted倒序排,在sorted函数的第三个参数加上reverse=true,第三个参数不写默认是正序排

sorted(tmp.items(),key = lambda item:item[0],reverse = True)

二、列表、字典、元组嵌套排序

# 列表嵌套字典
tmp = [{"name":"c","age":2},{"name":"b","age":1},{"name":"a","age":3}]
# 按照name排序
print(sorted(tmp, key = lambda item:item['name']))
# 按照age排序
print(sorted(tmp, key = lambda item:item['age']))

# 字典嵌套列表
# 按照字典value值的第二个元素排序
tmp = {"a":[1,2,3],"c":[1,3,3],"b":[1,4,1],"d":[1,1,3]}
print(dict(sorted(tmp.items(), key = lambda item:item[1][1])))

# 列表嵌套元组
tmp = [(1,6),(3,4),(2,5),(1,3)]
# 按照列表里元组的第二个元素排序
print(sorted(tmp, key = lambda item:item[1]))

打印结果为:

只要理解lambda,不管是怎么嵌套,都能排序

三、多条件排序

多条件排序的意思是在第一条件相等情况下,按照第二个条件排序,以此类推.....

# 多条件排序
tmp = [{"name":"c","age":2},{"name":"b","age":1},{"name":"a","age":3},{"name":"d","age":3},{"name":"e","age":1}]
# 按age排序,age相同再按照name排序
print(sorted(tmp, key = lambda item:(item['age'],item['name'])))

tmp = [(1,6,3),(3,4,2),(2,3,4),(1,3,4)]
# 按照列表里元组的第三个元素排序,其次是第二个元素,其次是第一个元素
print(sorted(tmp, key = lambda item:(item[2],item[1],item[0])))

打印结果:

四、自定义排序顺序

如果业务需要,就要按照"ni" >"chi">"fan">"le">"ma"这种不符合字符串自然顺序来排,怎么办呢?

只需要自己定义下顺序就好了,如下图:

# 自定义排序顺序
sort_map = {"ni":1,"chi":2,"fan":3,"le":4,"ma":5}
tmp = ["ni","fan","chi","le","ma"]
print(sorted(tmp,key = lambda item:sort_map[item]))

tmp = [{"name":"ni","age":2},{"name":"le","age":1},{"name":"ma","age":3},{"name":"fan","age":3},{"name":"chi","age":1}]
print(sorted(tmp,key=lambda item:sort_map[item["name"]]))

打印结果:

相信如果对上面讲解的排序理解了,触类旁通,不管是列表(list)、字典(dict)、元组(tuple)还是其他数据类型,只需要稍稍变动,就能实现各种排序了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Eclipse】安装教程

首先打开官网:Eclipse Downloads | The Eclipse Foundation 这里我选择了下载最新版本 下载好后,双击下载的文件 ,即可进入到安装页面 点击第一个进行安装: 最后安装成功! 补充: 【Eclipse】安装JAVA EE插…

Jmter接口网站压力测试工具使用记录

1.首先下载Jmeter 官方地址:Apache JMeter - Apache JMeter™ 回到顶部 2.安装Jmeter 把下载的文件进行解压,产生如下目录: 打开bin文件夹下的jmeter.bat文件及进入程序的主界面窗体jmeter.log是日志文件。 主意:需要配置java环…

河北专升本(C语言)

目录 一:C语言的构成特点 二: 数据类型 三: 常量、变量、运算符及表达式 (一)标识符 (二)常量 (三)变量:其值可以改变的量 (四)各种类型数据混合运算 &…

打印编译程序固件的环境信息

在编译程序固件的时候,我们常常会有一个软件版本号,用来区分不同的版本,有时候又没变化软件版本号,重新发两个debug版本给测试验证,那我们就需要在程序中埋入一些环境信息,下面有两种方法来加入一下简单的信…

APP 备案公钥、签名 MD5、SHA-1、SHA-256获取方法。

公钥和 MD5 值可以通过安卓开发工具、Keytool、Jadx-GUI 等多种工具获取,最简单的就是以 jadx-gui 为例。 1.下载 jadx-gui 工具 ,点击此处 下载 jadx-gui 工具。 2.下载完成后,解压压缩包,双击 jadx-gui-1.4.7.exe 运行。 3.…

Neo4j入门基础:CREATE,DELETE,SET,REMOVE(看不懂我直接吃...)

1. 创建节点 1.1 创建一个节点 create (s:student1)创建一个标签为student1的节点 1.2 创建多个节点 create (s2:student2),(s3:student3)同时创建两个节点,标签分别为:student2,student3 1.3 创建节点并附带(多个&#xff0…

MAC上设置IDEA如何一个窗口打开多个项目,多个tab

1、IDEA一个窗口打开多个项目 如果你打开了多个项目、每次切换都要半天,想让项目都汇聚到top栏 点击 Window - Merge All Project Windows 即可 但是这样比较挫,每次打开新的项目都还是会重新打开一个IDEA窗口 so,如何设置项目在同一个窗口…

树模型(一)孤立森林

孤立森林(Isolation Forest)算法是西瓜书作者周志华老师的团队研究开发的算法,一般用于结构化数据的异常检测。 异常的定义 针对于不同类型的异常,要用不同的算法来进行检测,而孤立森林算法主要针对的是连续型结构化…

Junit单元测试之Maven项目集成Jacoco,查看覆盖率报告

关于单元测试以及本文Calculate类等内容,请见前述文章Junit单元测试_Joy T的博客-CSDN博客 要学Jacoco,首先要知道测试覆盖率是什么! 测试覆盖率 测试覆盖率表示的是测试用例所能触及(或“覆盖”)的代码百分比。换句…

2023年起重信号司索工(建筑特殊工种)证考试题库及起重信号司索工(建筑特殊工种)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年起重信号司索工(建筑特殊工种)证考试题库及起重信号司索工(建筑特殊工种)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特…

kafka安装和使用的入门教程

这篇文章简单介绍如何在ubuntu上安装kafka,并使用kafka完成消息的发送和接收。 一、安装kafka 访问kafka官网Apache Kafka,然后点击快速开始 紧接着,点击Download 最后点击下载链接下载安装包 二、启动kafka 经过上一步下载完成后&#xff…

新网站如何快速接入百度推荐

百度站长工具 在百度站长工具中点击“自动推送”&#xff0c;如下截图: 推送代码放网站的底部 将百度平台提交的主动推送代码放在自己的网站的底部模板中&#xff1b; <script> (function(){ var bp document.createElement(script); var curProtocol window.locati…

基于算术优化优化的BP神经网络(分类应用) - 附代码

基于算术优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于算术优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.算术优化优化BP神经网络3.1 BP神经网络参数设置3.2 算术优化算法应用 4.测试结果…

KOSMOS-2.5:密集文本的多模态读写模型

Overview 总览摘要1 引言2 KOSMOS-2.52.1 模型结构2.1 图像和文本表征2.3 预训练数据2.4 数据处理2.5 过滤与质量控制 3 实验3.1 评估3.2 实现细节3.3 结果3.4 讨论 4 相关工作4.1 多模态大语言模型4.2 图文理解 5 总结与展望 总览 题目: KOSMOS-2.5: A Multimodal Literate M…

中断机制-通过volatile实现线程中断停止

4.1.4 大厂面试题中断机制考点 如何停止中断运行中的线程&#xff1f; 通过一个volatile变量实现 package com.nanjing.gulimall.zhouyimo.test;import java.util.concurrent.TimeUnit;/*** author zhou* version 1.0* date 2023/10/15 2:34 下午*/ public class InterruptD…

选择排序(学习笔记)

选择排序 选择排序的基本思想是冒泡排序&#xff0c;记录当前位置i和最小值k的位置&#xff0c;使用一个变量j往后寻找。 每一轮找到最小值后与第一个元素进行交换&#xff0c;以此类推。 不使用辅助变量交换两个元素的值方法 package com.company.sort;import java.util.Ra…

【AI视野·今日NLP 自然语言处理论文速览 第五十一期】Tue, 10 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 10 Oct 2023 (showing first 100 of 172 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Few-Shot Spoken Language Understanding via Joint Speech-Text Model…

使用PyTorch加载数据集:简单指南

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

网络链接失败怀疑是服务器处于非正常状态?如何用本地电脑查看服务器是否正常?

网络链接失败怀疑是服务器处于非正常状态&#xff1f;如何用本地电脑查看服务器是否正常&#xff1f; 网页会出现链接失败&#xff0c;可以实时用cdm大法&#xff0c;cdm可以更好的排查字节数据的返回&#xff0c;可以让我们更好的要检查服务器是否处于正常状态&#xff0c;接下…

纯文本邮件发送:java

1.打开jdk的conf下的security文件的.security,找到并删除&#xff0c;权限问题建议复制文件修改后替换 jdk.tls.disabledAlgorithmsSSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL 删除后的内容 然…