Python3 对列表、字典以及二者的嵌套数据(JSON)格式排序

Python 中,列表和字典都是基础数据类型,这两种数据类型会通过相互嵌套和多个层级形成复杂的数据类型,类似 JSON 数据格式,对列表和字典排序其实可以类比是对 JSON 排序。

列表排序

列表可以使用 sorted() 函数排序:

In [1]: color = ['White', 'Black', 'Red', 'Yellow', 'Green', 'Blue']In [2]: sorted(color)
Out[2]: ['Black', 'Blue', 'Green', 'Red', 'White', 'Yellow']

对列表降序排序:

In [3]: sorted(color, reverse=True)
Out[3]: ['Yellow', 'White', 'Red', 'Green', 'Blue', 'Black']

也可以使用列表内置的排序属性 list.sort()

In [1]: color = ['White', 'Black', 'Red', 'Yellow', 'Green', 'Blue']In [2]: color
Out[2]: ['White', 'Black', 'Red', 'Yellow', 'Green', 'Blue']In [3]: color.sort()In [4]: color
Out[4]: ['Black', 'Blue', 'Green', 'Red', 'White', 'Yellow']In [5]: color.sort(reverse=True)In [6]: color
Out[6]: ['Yellow', 'White', 'Red', 'Green', 'Blue', 'Black']

list.sort() 只有列表才有的属性,它会直接修改原列表并返回 None(原地排序)。而 sorted() 适用于任何可迭代的对象,如果你不需要原地排序使用 sorted() 会更加方便和高效。

字典排序

字典使用 sorted() 函数排序:

In [1]: color = {'White': 1, 'Black': 2, 'Red': 3, 'Yellow': 3, 'Green': 2, 'Blue': 1}In [2]: color
Out[2]: {'White': 1, 'Black': 2, 'Red': 3, 'Yellow': 3, 'Green': 2, 'Blue': 1}

对字典的键升序排序:

In [3]: sorted(color)
Out[3]: ['Black', 'Blue', 'Green', 'Red', 'White', 'Yellow']

sorted() 函数默认对字典的键升序排序,等同如下形式:

In [4]: sorted(color.keys(), reverse=False)
Out[4]: ['Black', 'Blue', 'Green', 'Red', 'White', 'Yellow']

对字典的键降序排序:

In [5]: sorted(color, reverse=True)
Out[5]: ['Yellow', 'White', 'Red', 'Green', 'Blue', 'Black']In [6]: sorted(color.keys(), reverse=True)
Out[6]: ['Yellow', 'White', 'Red', 'Green', 'Blue', 'Black']

对字典的值升序排序:

In [7]: sorted(color.values())
Out[7]: [1, 1, 2, 2, 3, 3]

这种排序结果是字典值的列表,所以一般情况下需要指定排序算法,通常使用 lambda 函数作为排序规则。

lambda x: x[1]x 是元组,x[0] 是键,x[1] 是值。

In [8]: sorted(color.items(), key=lambda x: x[1])
Out[8]: 
[('White', 1),('Blue', 1),('Black', 2),('Green', 2),('Red', 3),('Yellow', 3)]

字典排序完成后可以通过 dict() 函数将元组变回字典:

In [15]: dict(sorted(color.items(), key=lambda x: x[1]))
Out[15]: {'White': 1, 'Blue': 1, 'Black': 2, 'Green': 2, 'Red': 3, 'Yellow': 3}

在 Python 3.5(含)以前,字典是不能保证顺序的,键值对 A 先插入字典,键值对 B 后插入字典,但是当你打印字典的 Keys 列表时,你会发现 B 可能在A的前面。 但是从 Python 3.6 开始,字典是变成有顺序的了。

嵌套排序

上文只是对列表和字段排序进行单独的说明,但是在实际开发过程中嵌套排序才是经常遇到的,所以嵌套排序才是本文的重点。

通过排列组合可知嵌套排序有如下四种:

字典嵌套字典

In [1]: color = {...:     'White': {'level': 1},...:     'Black': {'level': 2},...:     'Red': {'level': 3},...:     'Yellow': {'level': 3},...:     'Green': {'level': 2},...:     'Blue': {'level': 1}...: }In [2]: color
Out[2]: 
{'White': {'level': 1},'Black': {'level': 2},'Red': {'level': 3},'Yellow': {'level': 3},'Green': {'level': 2},'Blue': {'level': 1}}

对字典的键升序排序:

In [3]: sorted(color.items())
Out[3]: 
[('Black', {'level': 2}),('Blue', {'level': 1}),('Green', {'level': 2}),('Red', {'level': 3}),('White', {'level': 1}),('Yellow', {'level': 3})]In [4]: dict(sorted(color.items()))
Out[4]: 
{'Black': {'level': 2},'Blue': {'level': 1},'Green': {'level': 2},'Red': {'level': 3},'White': {'level': 1},'Yellow': {'level': 3}}

对字典的键降序排序:

In [5]: sorted(color.items(), key=lambda x: x[0], reverse=True)
Out[5]: 
[('Yellow', {'level': 3}),('White', {'level': 1}),('Red', {'level': 3}),('Green', {'level': 2}),('Blue', {'level': 1}),('Black', {'level': 2})]In [6]: dict(sorted(color.items(), key=lambda x: x[0], reverse=True))
Out[6]: 
{'Yellow': {'level': 3},'White': {'level': 1},'Red': {'level': 3},'Green': {'level': 2},'Blue': {'level': 1},'Black': {'level': 2}}

字典嵌套列表

In [1]: color = {...:     'White': [250, 255, 251],...:     'Black': [0, 2, 1],...:     'Red': [255, 2, 0],...:     'Yellow': [255, 254, 0],...:     'Green': [1, 128, 0],...:     'Blue': [0, 1, 255]...: }In [2]: color
Out[2]: 
{'White': [250, 255, 251],'Black': [0, 2, 1],'Red': [255, 2, 0],'Yellow': [255, 254, 0],'Green': [1, 128, 0],'Blue': [0, 1, 255]}

对字典的键升序排序:

In [3]: sorted(color.items())
Out[3]: 
[('Black', [0, 2, 1]),('Blue', [0, 1, 255]),('Green', [1, 128, 0]),('Red', [255, 2, 0]),('White', [250, 255, 251]),('Yellow', [255, 254, 0])]In [4]: dict(sorted(color.items()))
Out[4]: 
{'Black': [0, 2, 1],'Blue': [0, 1, 255],'Green': [1, 128, 0],'Red': [255, 2, 0],'White': [250, 255, 251],'Yellow': [255, 254, 0]}

对字典中列表的值升序排序:

In [5]: sorted(color.items(), key=lambda x: x[1][0])
Out[5]: 
[('Black', [0, 2, 1]),('Blue', [0, 1, 255]),('Green', [1, 128, 0]),('White', [250, 255, 251]),('Red', [255, 2, 0]),('Yellow', [255, 254, 0])]In [6]: sorted(color.items(), key=lambda x: x[1][1])
Out[6]: 
[('Blue', [0, 1, 255]),('Black', [0, 2, 1]),('Red', [255, 2, 0]),('Green', [1, 128, 0]),('Yellow', [255, 254, 0]),('White', [250, 255, 251])]In [7]: sorted(color.items(), key=lambda x: x[1][2])
Out[7]: 
[('Red', [255, 2, 0]),('Yellow', [255, 254, 0]),('Green', [1, 128, 0]),('Black', [0, 2, 1]),('White', [250, 255, 251]),('Blue', [0, 1, 255])]

lambda x: x[1][0] 中,x[1][0] 代表按列表第一个值排序,以此类推。

对字典中列表的值降序排序:

In [8]: sorted(color.items(), key=lambda x: x[1][0], reverse=True)
Out[8]: 
[('Red', [255, 2, 0]),('Yellow', [255, 254, 0]),('White', [250, 255, 251]),('Green', [1, 128, 0]),('Black', [0, 2, 1]),('Blue', [0, 1, 255])]

列表嵌套列表

In [1]: color = [['White', 2], ['Black', 3], ['Red', 4],['White', 1], ['Black', 2], ['Red', 3]]In [2]: color
Out[2]: 
[['White', 2],['Black', 3],['Red', 4],['White', 1],['Black', 2],['Red', 3]]In [3]: sorted(color)
Out[3]: 
[['Black', 2],['Black', 3],['Red', 3],['Red', 4],['White', 1],['White', 2]]In [4]: sorted(color, reverse=True)
Out[4]: 
[['White', 2],['White', 1],['Red', 4],['Red', 3],['Black', 3],['Black', 2]]

列表嵌套字典

In [1]: colors = [...:     {'color': 'White', 'level': 2},...:     {'color': 'Black', 'level': 3},...:     {'color': 'Red', 'level': 4},...:     {'color': 'White', 'level': 1},...:     {'color': 'Black', 'level': 2},...:     {'color': 'Red', 'level': 3}...: ]In [2]: colors
Out[2]: 
[{'color': 'White', 'level': 2},{'color': 'Black', 'level': 3},{'color': 'Red', 'level': 4},{'color': 'White', 'level': 1},{'color': 'Black', 'level': 2},{'color': 'Red', 'level': 3}]

对列表中每个字典的 color 字段进行排序(单级排序):

In [3]: sorted(colors, key=lambda x: x['color'])
Out[3]: 
[{'color': 'Black', 'level': 3},{'color': 'Black', 'level': 2},{'color': 'Red', 'level': 4},{'color': 'Red', 'level': 3},{'color': 'White', 'level': 2},{'color': 'White', 'level': 1}]

对列表中每个字典的 color 字段进行排序后再对 level 字段排序(多级排序):

In [4]: sorted(colors, key=lambda x: (x['color'], x['level']))
Out[4]: 
[{'color': 'Black', 'level': 2},{'color': 'Black', 'level': 3},{'color': 'Red', 'level': 3},{'color': 'Red', 'level': 4},{'color': 'White', 'level': 1},{'color': 'White', 'level': 2}]

参考文章:
https://docs.python.org/zh-cn/3/howto/sorting.html
https://www.kingname.info/2019/07/13/python-dict
https://blog.csdn.net/ray_up/article/details/42084863

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

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

相关文章

Centos误删系统自带python2.7,yum报错恢复方法

使用wget分别下载python以及yum的rpm包 资源地址如下: http://vault.centos.org mkdir /usr/local/src/pythoncd /usr/local/src/pythonwget http://vault.centos.org/7.6.1810/os/x86_64/Packages/python-backports-1.0-8.el7.x86_64.rpmwget ht…

【C++历险记】面向对象|菱形继承及菱形虚拟继承

个人主页:兜里有颗棉花糖💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

List中的元素类型为Map,如何更新map中的内容

假设List 包含一个 Map&#xff0c;形式如下&#xff1a; List<Map<String, Object>> myList new ArrayList<>(); Map<String, Object> myMap new HashMap<>(); myMap.put("key1", "value1"); myMap.put("key2"…

Go 官方标准编译器中所做的优化

本文是对#102 Go 官方标准编译器中实现的优化集锦汇总[1] 内容的记录与总结. 优化1-4: 字符串和字节切片之间的转化 1.紧跟range关键字的 从字符串到字节切片的转换&#xff1b; package mainimport ( "fmt" "strings" "testing")var cs10086 s…

解决 .csv 文件上传到 pgsql 的字符报错问题

目录 背景问题解决办法 背景 上传 .csv 文件进行数据导入到 pg 时&#xff0c;报错显示如下&#xff1a; ods.tbl_inp_fee_detail.csv数据上传失败 报错信息:org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 Where: C…

一文速学-让神经网络不再神秘,一天速学神经网络基础(五)-最优化

前言 思索了很久到底要不要出深度学习内容&#xff0c;毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新&#xff0c;很多坑都没有填满&#xff0c;而且现在深度学习的文章和学习课程都十分的多&#xff0c;我考虑了很久决定还是得出神经网络系列文章&#xff0c;…

服务war包部署SpringBootServletInitializer 的作用

在 Spring Boot 应用中&#xff0c;如果需要将应用打包成 WAR 包并部署到外部的 Servlet 容器中&#xff0c;就需要使用 SpringBootServletInitializer。 使用步骤&#xff1a; 必须创建war项目&#xff0c;需要创建好web项目的目录嵌入式Tomcat依赖scope指定provided编写Spr…

一篇文章教会你什么是二叉搜索树

二叉搜索树 二叉搜索树概念二叉搜索树操作1.二叉搜索树的查找2.二叉搜索树的插入3.二叉搜索树的删除4.二叉搜索树的遍历 二叉搜索树的实现1.二叉搜索树节点结构2.二叉搜索树类3.二叉搜索树的构造及析构4.二叉搜索树的拷贝构造及赋值重载5.二叉搜索树插入6.二叉搜索树查找7.二叉…

suricata命令和规则语法

Suricata User Guide — Suricata 7.0.1-dev documentation 一、命令行选项 1、常用启动选项 -c <path> 指定配置文件suricata.yaml所在路径 -i <interface> 指定要监控的网卡名称或ip地址 -T 测试配置文件是否正确 -v 设定日志级别&#xff0c;包括-v: INFO -vv…

UE5 C++ UGameInstance 功能、作用及应用

# UE5 C UGameInstance 功能及作用 网上有很多文章介绍&#xff0c;例如在游戏中只有一个实例&#xff0c;换关卡不会丢失等。暂时省略。 # UE5 C UGameInstance 应用 ## 应用一&#xff0c;UE5 C UGameInstance 里监听player创建事件 UWebSocketGameInstance.h里的定义 …

ELK日志收集系统集群实验(5.5.0版)

目录 前言 一、概述 二、组件介绍 1、elasticsearch 2、logstash 3、kibana 三、架构类型 四、ELK日志收集集群实验 1、实验拓扑 2、在node1和node2节点安装elasticsearch 3、启动elasticsearch服务 4、在node1安装elasticsearch-head插件 5、测试输入 6、node1服…

数据结构--6.0最短路径

目录 一、迪杰斯特拉算法&#xff08;Dijkstra&#xff09; 二、弗洛伊德算法&#xff08;Floyd&#xff09; 在网图和非网图中&#xff0c;最短路径的含义是不同的。 ——网图是两顶点经过的边上的权值之和最少的路径。 …

找不到msvcp140.dll的解决方法【msvcp140.dll修复工具下载】

今天&#xff0c;我将为大家分享一个与我们日常工作息息相关的话题——msvcp140.dll重新安装的5种解决方法。在接下来的时间里&#xff0c;我将向大家介绍什么是msvcp140.dll,为什么会丢失&#xff0c;以及它的用途。最后&#xff0c;我将为大家提供5种解决方法&#xff0c;帮助…

spring高级源码50讲-37-42(springBoot)

Boot 37) Boot 骨架项目 如果是 linux 环境&#xff0c;用以下命令即可获取 spring boot 的骨架 pom.xml curl -G https://start.spring.io/pom.xml -d dependenciesweb,mysql,mybatis -o pom.xml也可以使用 Postman 等工具实现 若想获取更多用法&#xff0c;请参考 curl …

【GUI开发】用python爬YouTube博主信息,并开发成exe软件

文章目录 一、背景介绍二、代码讲解2.1 爬虫2.2 tkinter界面2.3 存日志 三、软件演示视频四、说明 一、背景介绍 你好&#xff0c;我是马哥python说&#xff0c;一名10年程序猿。 最近我用python开发了一个GUI桌面软件&#xff0c;目的是爬取相关YouTube博主的各种信息&#…

01-认识风控

对风控的理解/价值 如果把平台比做一棵树&#xff0c;那么需要足够多的养分才能使树茁壮成长&#xff1b;而业务风险则是充当寄生在树上窃取养分的角色&#xff1b;只有抵御这种风险&#xff0c;保持足够多的养分&#xff0c;才能使平台成长为参天大树——这就是风控存在的价值…

【深入浅出C#】章节10: 最佳实践和性能优化:编码规范和代码风格

编码规范和代码风格之所以重要&#xff0c;是因为它们直接影响到软件开发的质量、可维护性、可读性和协作效率。编码规范和代码风格是编程中的关键要素&#xff0c;它们有助于编写高质量、可维护和易读的代码&#xff0c;提高团队协作效率&#xff0c;减少错误&#xff0c;降低…

PoseC3D 基于人体姿态的动作识别新范式

摘要1. Introduction2. Related Work动作识别 3D-CNN基于骨架的动作识别 GCN基于骨骼的动作识别 2D-CNN3. Framework3.1. Good Practice for Pose Extraction3.2. From 2D Poses to 3D Heatmap Volumes3.3 基于骨骼的动作识别 3D-CNNPose-SlowOnlyRGBPose-SlowFast4. Experimen…

基于Open3D的点云处理16-特征点匹配

点云配准 将点云数据统一到一个世界坐标系的过程称之为点云配准或者点云拼接。&#xff08;registration/align&#xff09; 点云配准的过程其实就是找到同名点对&#xff1b;即找到在点云中处在真实世界同一位置的点。 常见的点云配准算法: ICP、Color ICP、Trimed-ICP 算法…

ChatGPT Prompting开发实战(三)

一、关于chaining prompts与CoT的比较 前面谈到的CoT的推理过程&#xff0c;可以比作是一次性就烹调好一顿大餐&#xff0c;那么接下来要说的“chaining prompts”&#xff0c;其背后的理念是分多次来完成这样一项复杂任务&#xff0c;每次只完成其中一步或者一个子任务。核心…