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

【python】(16)python的字典dict按照key或value排序的不同方法

系列文章回顾
【python】(01)初识装饰器Decorator
【python】(02)初识迭代器Iterator
【python】(03)初识生成器Generator
【python】(04)python中实现多任务并发和并行的区别
【python】(05)如何使用python中的logging模块记录日志信息
【python】(06)理解Python中的 lambda 、map、filter、reduce 函数
【python】(07)理解Python中函数的参数类型
【python】(08)理解Python中的可变对象和不可变对象
【python】(09)理解Python中的zip()和zip(*iterable)
【python】(10)理解Python中的数据聚合和分组运算
【python】(11)理解Python中的常用队列类型
【python】(12)理解Python中的三种常用的数组操作函数stack、hstack和vstack
【python】(13)理解Python中的处理时间的模块
【python】(14)理解Python中的pypinyin库
【python】(15)python的series进行值替换的4种代码实现方法
【python】(16)python的字典dict按照key或value排序的不同方法

文章目录

    • 一.使用 sorted()和lambda表达式
      • 1.1 实现代码示例
      • 1.2 优点
      • 1.3 缺点
    • 二.使用collections模块中的OrderedDict
      • 2.1 实现代码示例
      • 2.2 优点
      • 2.3 缺点
    • 三.使用 sorted()和列表推导式
      • 3.1 实现代码示例
      • 3.2 优点
      • 3.3 缺点
    • 四.使用 operator模块中的itemgetter函数
      • 4.1 实现代码示例
      • 4.2 优点
      • 4.3 缺点
    • 五.使用pandas库的Series对象
      • 5.1 实现代码示例
      • 5.2 优点
      • 5.3 缺点
    • 六.使用zip函数
      • 6.1 实现代码示例
      • 6.2 优点
      • 6.3 缺点


本文介绍了6种用python实现字典dict按照key或value排序的方法,可发现以下5个结论:

  • 1)对于简单的需求,如仅需要对字典的键进行排序,使用sorted()函数和lambda表达式是最简洁的方法,但性能较差。
  • 2)如果需要保留原始插入顺序,可以使用collections模块中的OrderedDict。
  • 3)如果希望灵活地对键值进行其他操作,可以使用列表推导式和sorted()函数。
  • 4)当涉及到数据分析和处理时,可以考虑使用pandas库的Series对象来进行排序。
  • 5)对于需要提高性能的场景,可以考虑使用itemgetter函数或者zip函数。
    综合考虑,最适合的方法取决于具体的使用场景和需求,可以根据实际情况灵活选择。

一.使用 sorted()和lambda表达式

1.1 实现代码示例

1)字典dict按照key排序

my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[0]))
print(sorted_dict)

2)字典dict按照value排序

my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[1]))
print(sorted_dict)

1.2 优点

简单易用,一行代码即可完成排序。

1.3 缺点

性能相对较差,特别是对于大型字典。

二.使用collections模块中的OrderedDict

2.1 实现代码示例

1)字典dict按照key排序

from collections import OrderedDictmy_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = OrderedDict(sorted(my_dict.items()))
print(sorted_dict)

2)字典dict按照value排序

from collections import OrderedDictmy_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = OrderedDict(sorted(my_dict.items(), key=lambda x: x[1]))
print(sorted_dict)

2.2 优点

返回的是有序的字典,可以保留原始插入顺序。

2.3 缺点

对于大型字典,性能可能会有所下降。

三.使用 sorted()和列表推导式

3.1 实现代码示例

1)字典dict按照key排序

my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_keys = sorted(my_dict.keys())
sorted_dict = {k: my_dict[k] for k in sorted_keys}
print(sorted_dict)

2)字典dict按照value排序

my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_keys = sorted(my_dict, key=my_dict.get)
sorted_dict = {k: my_dict[k] for k in sorted_keys}
print(sorted_dict)

3.2 优点

灵活性强,可以方便地对key或value进行其他操作。

3.3 缺点

需要多行代码来完成排序,不如一行代码的sorted()函数简洁。

四.使用 operator模块中的itemgetter函数

4.1 实现代码示例

1)字典dict按照key排序

from operator import itemgettermy_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(my_dict.items(), key=itemgetter(0)))
print(sorted_dict)

2)字典dict按照value排序

from operator import itemgettermy_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(my_dict.items(), key=itemgetter(1)))
print(sorted_dict)

4.2 优点

itemgetter函数可以提高排序的性能。

4.3 缺点

相对于lambda表达式,语法略显复杂。

五.使用pandas库的Series对象

5.1 实现代码示例

1)字典dict按照key排序

import pandas as pdmy_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_series = pd.Series(my_dict).sort_index()
sorted_dict = sorted_series.to_dict()
print(sorted_dict)

2)字典dict按照value排序

import pandas as pdmy_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_series = pd.Series(my_dict).sort_values()
sorted_dict = sorted_series.to_dict()
print(sorted_dict)

5.2 优点

使用pandas库的Series对象可以方便地进行数据分析和处理。

5.3 缺点

引入了pandas库,对于小规模的操作可能显得过于庞大。

六.使用zip函数

6.1 实现代码示例

1)字典dict按照key排序

my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_items = sorted(zip(my_dict.keys(), my_dict.values()))
sorted_dict = dict(sorted_items)
print(sorted_dict)

2)字典dict按照value排序

my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_items = sorted(zip(my_dict.values(), my_dict.keys()))
sorted_dict = {k: v for v, k in sorted_items}
print(sorted_dict)

6.2 优点

可以一次性解决键值对的排序。

6.3 缺点

需要额外的步骤将排序后的元组转换为字典。

相关文章:

【python】(16)python的字典dict按照key或value排序的不同方法

系列文章回顾 【python】(01)初识装饰器Decorator 【python】(02)初识迭代器Iterator 【python】(03)初识生成器Generator 【python】(04)python中实现多任务并发和并行的区别 【python】(05)如何使用python中的logging模块记录日志信息 【python】(06)理解Python中的 lambda 、…...

微服务篇-C 深入理解第一代微服务(SpringCloud)_VI 深入理解Zuul服务网关

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载 Part 1 理论部分 1 网关类别有哪些? 常见的网关类别有三种:开放API(Open API)网关、微服务…...

web CSS笔记1

CSS(Cascading Style Sheets) 美化样式 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及…...

js算法记录

> 更多请前往 https://www.passerma.com/article/86 滑动窗口 1 给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组。现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数 function minSubmatrixWidth(mat…...

球面数据的几何深度学习--球形 CNN

目录 一、说明二、球形 CNN概述三、球面数据的对称性四、标准(平面)CNN的局限性五、卷积并发症六、球面卷积七、球面卷积是不够的 一、说明 球面数据的几何深度学习–球形 CNN。通过对物理世界的平移对称性进行编码,卷积神经网络 &#xff0…...

MySQL学习笔记------SQL(1)

关系型数据库(RDBMS) 建立在关系模型基础上,由多张相互连接的二维表组成的数据库 特点:使用表储存数据,格式统一,便于维护 使用SQL语言操作,标准统一,使用方便 SQL通用语法 SQL…...

PMP能提前查成绩?还能改分数?别太离谱!

震惊!3月10日PMP考试才结束没多久,昨天就有学员收到了查分邮件,寄信人自称自己是内部人员,可以提前查询到成绩并直接修改成绩。 这也太离谱了吧!在此,小赛想说,PMP考试是一个公正、严格的考试体…...

【保姆级讲解服务器硬件的基础知识】

服务器硬件基础知识 1. 前言2. 中央处理器(CPU)3. 内存(RAM)4. 存储设备5. 主板6. 电源供应单元(PSU)7. 冷却系统8. 网络连接9. 扩展插槽和端口10. 管理功能 🌈🌈🌈&…...

并查集---力扣547省份的数量

假设:有一群小混混打架,小弟们可能互相不认识,如果要确定他们是一伙的,就需要确定他们的组长是不是一个,但是每个组长的领导可能又不一样,所以要找到最大的那个领导,才能确定是一伙的。 我们先…...

stm32启动文件里面的__main和主函数main()

一、__main和main()之间的关系 先来对stm32启动过程简单学习 启动文件里面的Reset_Handler: 调用过程: stm32在启动后先进入重启中断函数Reset_Handler,其中会先后调用SystemInit和__main函数, __main函数属于c库函数&…...

曲线生成 | 图解Reeds-Shepp曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 什么是Reeds-Shepp曲线?2 Reeds-Shepp曲线的运动模式3 Reeds-Shepp曲线算法原理3.1 坐标变换3.2 时间翻转(time-flip)3.3 反射变换(reflect)3.4 后向变换(backwards) 4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f5…...

深入探讨iOS开发:从创建第一个iOS程序到纯代码实现全面解析

iOS开发作为移动应用开发的重要领域之一,对于开发人员具有重要意义。本文将深入探讨iOS开发的各个方面,从创建第一个iOS程序到纯代码实现iOS开发,带领读者全面了解iOS应用程序的开发流程和技术要点。 📱 第一个iOS程序 在创建第…...

Python学习之-正则表达式

目录 前言:1.re.serach1.1例子: 2.re.match2.1示例1:2.2 示例2: 3.re.findall3.1 示例 4.re.fullmatch4.1 示例1:4.2 示例2: 5.re.split5.1 示例1:5.2 示例2:5.3 示例3: 6.re.sub6.1 示例&#…...

Godot.NET C# 工程化开发(1):通用Nuget 导入+ 模板文件导出,包含随机数生成,日志管理,数据库连接等功能

文章目录 前言Github项目地址,包含模板文件后期思考补充项目设置编写失误环境visual studio 配置详细的配置看我这篇文章 Nuget 推荐NewtonSoft 成功Bogus 成功Github文档地址随机生成构造器生成构造器接口(推荐) 文件夹设置Nlog 成功!Nlog.configNlogHe…...

数据仓库——雪花模式以及层次递归

层次结构 钻取 向下钻取:对某些代表事实的报表中添加维度细节 向上钻取:从某些代表事实的报表中去除维度细节 属性层次 提供了一种自然方法,用于顺序地在不断深入的层次上组织事实。许多维度可以被理解为包含连续主从关系的属性层次。此类…...

Transformer的前世今生 day09(Transformer的框架概述)

前情提要 编码器-解码器结构 如果将一个模型分为两块:编码器和解码器那么编码器-解码器结构为:编码器负责处理输入,解码器负责生成输出流程:我们先将输入送入编码器层,得到一个中间状态state,并送入解码器…...

Qt 压缩/解压文件

前面讲了很多Qt的文件操作,文件操作自然就包括压缩与解压缩文件了,正好最近项目里要用到压缩以及解压缩文件,所以就研究了一下Qt如何压缩与解压缩文件。 QZipReader/QZipWriter QZipReader 和 QZipWriter 类提供了用于读取和写入 ZIP 格式文…...

【leetcode刷题之路】面试经典150题(8)——位运算+数学+一维动态规划+多维动态规划

文章目录 20 位运算20.1 【位运算】二进制求和20.2 【位运算】颠倒二进制位20.3 【位运算】位1的个数20.4 【位运算】只出现一次的数字20.5 【哈希表】【位运算】只出现一次的数字 II20.6 【位运算】数字范围按位与 21 数学21.1 【双指针】回文数21.2 【数学】加一21.3 【数学】…...

JetBrains全家桶激活,分享 WebStorm 2024 激活的方案

大家好,欢迎来到金榜探云手! WebStorm公司简介 JetBrains 是一家专注于开发工具的软件公司,总部位于捷克。他们以提供强大的集成开发环境(IDE)而闻名,如 IntelliJ IDEA、PyCharm、和 WebStorm等。这些工具…...

Sublime 彻底解决中文乱码

1. 按ctrl,打开Console,输入如下代码: import urllib.request,os; pf Package Control.sublime-package; ipp sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHand…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

StarRocks 全面向量化执行引擎深度解析

StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计&#xff0c;相比传统行式处理引擎&#xff08;如MySQL&#xff09;&#xff0c;性能可提升 5-10倍。以下是分层拆解&#xff1a; 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...