当前位置: 首页 > news >正文

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

相关文章:

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

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

如何在B站进行学习直播

诸神缄默不语-个人CSDN博文目录 会根据我使用的情况进行持续更新 文章目录 1. 电脑 - 哔哩哔哩直播姬1. 软件的基础使用2. 素材1. 摄像头2. 窗口捕捉3. 游戏进程图片文字浏览器多媒体 3. H5插件其他注意事项 2. 手机直播3. iPad直播 1. 电脑 - 哔哩哔哩直播姬 1. 软件的基础使…...

老卫带你学---windows上安装minikube

老卫带你学—windows上安装minikube 1. 下载minikube https://storage.googleapis.com/minikube/releases/latest/minikube-installer.exe2.安装好后,将对应的目录添加env path 3. minikube start --kubernetes-versionv1.23.8 --image-mirror-countrycn...

Neo-reGeorg隧道搭建

目录 Neo-regeorg前言 环境搭建 具体使用 kail安装Neo-reGeorg kail内生成webshell并设置密码 kail与win10连接 windows server内打开服务 kail虚拟机访问windows server以及所在的内网 Neo-regeorg前言 regeorg为reDuh的升级版,主要功能就是把内网服务器的…...

Elasticsearch 7.6 - API高阶操作篇

ES 7.6 - API高阶操作篇 分片和副本索引别名添加别名查询所有别名删除别名使用别名代替索引操作代替插入代替查询 场景实操 滚动索引索引模板创建索引模板查看模板删除模板 场景实操一把索引的生命周期数据迁移APIGEO(地理)API索引准备矩形查询圆形查询多边形查询 自定义分词器…...

软件第三方验收测评介绍

软件第三方验收测试 软件项目验收测试介绍: 软件项目验收测试是部署软件之前的最后一个测试操作,是对系统进行全面的测试,以验证其是否符合合同要求,出具第三方测试报告,为系统验收提供依据。 验收测试的目的是&…...

HarmonyOS—使用Web组件加载页面

页面加载是 Web 组件的基本功能。根据页面加载数据来源可以分为三种常用场景,包括加载网络页面、加载本地页面、加载 HTML 格式的富文本数据。 页面加载过程中,若涉及网络资源获取,需要配置ohos.permission.INTERNET网络访问权限。 加载网络…...

Redis 缓存穿透、击穿、雪崩

一、缓存穿透 1、含义 缓存穿透是指查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。 2、解决方案 1)缓存空对象 就是当数据库中查不到数据的时候,我缓存一个空对象…...

设计模式-原型模式详解

文章目录 前言理论基础1. 原型模式定义2. 原型模式角色3. 原型模式工作过程4. 原型模式的优缺点 实战应用1. 原型模式适用场景2. 原型模式实现步骤3. 原型模式与单例模式的区别 原型模式的变体1. 带有原型管理器的原型模式2. 懒汉式单例模式的原型模式实现3. 细粒度原型模式 总…...

大语言模型之七- Llama-2单GPU微调SFT

(T4 16G)模型预训练colab脚本在github主页面。详见Finetuning_LLama_2_0_on_Colab_with_1_GPU.ipynb 在上一篇博客提到两种改进预训练模型性能的方法Retrieval-Augmented Generation (RAG) 或者 finetuning。本篇博客过一下模型微调。 微调&#xff1a…...

房地产行业专题报告:日本房地产市场借鉴

目录 1. 日本房地产泡沫的形成与崩溃 1.1 背景:实际需求减弱、宽松货币和弱金融监管推动泡沫形成 1.1.1 宏观环境:日本 80 年代起生育率降低,房地产基本面支撑力不足 1.1.2 货币政策:宽松货币政策叠加金融自由化促进泡沫生成 1.1.3 助推因素:企业积极参与土地投机、股…...

Educational Codeforces Round 154 (Rated for Div. 2)

Educational Codeforces Round 154 (Rated for Div. 2) A. Prime Deletion 思路&#xff1a; 因为1到9每个数字都有&#xff0c;所以随便判断也质素即可 代码 #include<bits/stdc.h> using namespace std; #define int long long #define rep(i,a,n) for(int ia;i<…...

elasticsearch批量删除(查询删除)

注:delete by query只适用于低于elasticsearch2.0的版本(不包含2.0)。有两种形式: 1.无请求体 curl -XDELETE localhost:9200/twitter/tweet/_query?quser:kimchy 2.有请求体 使用请求体的时候&#xff0c;请求体中只能使用query查询&#xff0c;不能使用filter curl -XD…...

容器技术Linux Namespaces和Cgroups

对操作系统了解多少&#xff0c;仅仅敲个命令吗 操作系统虚拟化&#xff08;容器技术&#xff09;的发展历程 1979 年&#xff0c;UNIX 的第 7 个版本引入了 Chroot 特性。Chroot 现在被认为是第一个操作系统虚拟化&#xff08;Operating system level virtualization&#x…...

GO语言圣经 第四章习题

练习4.1 编写一个函数&#xff0c;计算两个SHA256哈希码中不同bit的数目。&#xff08;参考2.6.2节的PopCount函数。) func PopCount(ptr *[32]byte) int {var res intfor i : 0; i < 32; i {x : int(ptr[i])for x ! 0 {res x & 1x >> 1}}return res }练习4.2 编…...

远程连接Ubuntu 22.04

远程连接Ubuntu 22.04 安装openssh-server sudo apt install openssh-server检查服务运行状态 systemctl status sshd重启服务状态 sudo systemctl restart ssh开启防火墙 sudo ufw enable开启ssh传输端口 sudo ufw allow ssh设置开机启动服务 sudo systemctl enable ssh配置服…...

字节前端实习的两道算法题,看看强度如何

最长严格递增子序列 题目描述 给你一个整数数组nums&#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7…...

设计模式—策略模式

目录 一、定义 二、特点 三、优点 四、缺点 五、实例 六.涉及到的知识点 1、一个类里面有哪些东西&#xff1f; 2、类和实例 什么是类&#xff1f; 什么是实例&#xff1f; 什么是实例化&#xff1f; 3、字段和属性 什么是字段&#xff1f; 属性是什么&#xff1…...

LPDDR4、DDR4

核心信息&#xff1a; 2400Mbps&#xff08;每秒传输2400*1百万bit&#xff09; 2400MT/s&#xff08;百万次/秒&#xff09; 信号...

ESP32C3 LuatOS RC522①写入数据并读取M1卡

LuatOS RC522官方示例 官方示例没有针对具体开发板&#xff0c;现以ESP32C3开发板为例。 选用的RC522模块 ESP32C3-CORE开发板 注意ESP32C3的 SPI引脚位置&#xff0c;SPI的id2 示例代码 -- LuaTools需要PROJECT和VERSION这两个信息 PROJECT "helloworld" VERSIO…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...