元组,字典,列表排序

2023-05-16

经常需要对元组或者字典等序列按照特定的规则进行排序,
如按照年龄进行排序

>>> student_tuples = [
        ('john', 'A', 15),
        ('jane', 'B', 12),
        ('dave', 'B', 10),
]
>>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

上面显示的键功能模式非常普遍,因此Python提供了便利功能,使访问器功能更容易,更快捷。
操作员模块具有itemgetter,attrgetter,并且从Python 2.6开始具有methodcaller函数。
使用这些功能,以上示例变得更加简单和快捷。

>>> from operator import itemgetter, attrgetter, methodcaller

>>> sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

>>> sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

操作员模块功能允许进行多个级别的排序。
例如,要按年级然后按年龄排序:

>>> sorted(student_tuples, key=itemgetter(1,2))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

>>> sorted(student_objects, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

在下面的示例中,使用了操作员模块的第三个函数methodcaller,其中在对每个学生进行排序之前显示了每个学生的加权成绩:

>>> [(student.name, student.weighted_grade()) for student in student_objects]
[('john', 0.13333333333333333), ('jane', 0.08333333333333333), ('dave', 0.1)]
>>> sorted(student_objects, key=methodcaller('weighted_grade'))
[('jane', 'B', 12), ('dave', 'B', 10), ('john', 'A', 15)]

list.sort()和sorted()都接受带有布尔值的反向参数。
这用于标记降序排序。
例如,要以相反的年龄顺序获取学生数据:

>>> sorted(student_tuples, key=itemgetter(2), reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

>>> sorted(student_objects, key=attrgetter('age'), reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

从Python 2.2开始,保证排序是稳定的。这意味着当多个记录具有相同的键时,将保留其原始顺序。

>>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
>>> sorted(data, key=itemgetter(0))
[('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]

在Py3.0中,完全删除了cmp参数(这是简化和统一语言的较大工作的一部分,从而消除了丰富的比较与__cmp__方法之间的冲突)。
在Py2.x中,sort允许一个可选函数,可以进行比较。该函数应该接受两个参数进行比较,然后返回小于等于的负值,如果相等则返回零,或者返回大于等于的正值。例如,我们可以做:

>>> def numeric_compare(x, y):
        return x - y
>>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare)
[1, 2, 3, 4, 5]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

元组,字典,列表排序 的相关文章

  • 非对称加密算法之RSA介绍及OpenSSL中RSA常用函数使用举例

    RSA算法 xff0c 在1977年由Ron Rivest Adi Shamirh和LenAdleman xff0c 在美国的麻省理工学院开发完成 这个算法的名字 xff0c 来源于三位开发者的名字 RSA已经成为公钥数据加密标准 RSA属
  • 有效的rtsp流媒体测试地址汇总

    以下是从网上搜集的一些有效的rtsp流媒体测试地址 xff1a 1 rtsp 218 204 223 237 554 live 1 0547424F573B085C gsfp90ef4k0a6iap sdp 2 rtsp 218 204 2
  • Flask【第十章】:特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler...

    特殊装饰器 64 app before request 和 64 app after request以及 64 app errorhandler 一 背景 xff1a Flask我们已经学习很多基础知识了 现在有一个问题 我们现在有一个 F
  • Linux Socket基础介绍

    Linux Socket函数库是从Berkeley大学开发的BSD UNIX系统中移植过来的 BSD Socket接口是众多Unix系统中被广泛支持的TCP IP通信接口 xff0c Linux下的Socket程序设计 xff0c 除了微小
  • libcurl库的使用(通过libcurl库下载url图像)

    1 从http curl haxx se download html下载libcurl源码 xff0c 解压缩 xff1b 2 通过CMake cmake gui 生成vs2013 x64位 CURL sln xff1b 3 打开CURL
  • 人工神经网络简介

    本文主要对人工神经网络基础进行了描述 xff0c 主要包括人工神经网络的概念 发展 特点 结构 模型 本文是个科普文 xff0c 来自网络资料的整理 一 人工神经网络的概念 人工神经网络 xff08 Artificial Neural Ne
  • 卷积神经网络(CNN)基础介绍

    本文是对卷积神经网络的基础进行介绍 xff0c 主要内容包括卷积神经网络概念 卷积神经网络结构 卷积神经网络求解 卷积神经网络LeNet 5结构分析 卷积神经网络注意事项 一 卷积神经网络概念 上世纪60年代 xff0c Hubel等人通过
  • C++中struct的使用

    C 43 43 语言继承了C语言的struct xff0c 并且加以扩充 在C语言中struct是只能定义数据成员 xff0c 而不能定义成员函数的 而在C 43 43 中 xff0c struct类似于class xff0c 在其中既可以
  • Windows与Linux之间互传文件的方法

    以下方法均是以Windows为操作机 xff1a 1 通过WinSCP WinSCP是一款开源的SFTP客户端 xff0c 运行于Windows系统下 xff0c 遵照GPL发布 WinSCP除了SFTP xff0c 还支持SSH SCP
  • 非对称加密算法RSA公钥私钥的模数和指数提取方法

    生成非对称加密算法RSA公钥 私钥的方法 xff1a 1 通过OpenSSL库生成 xff0c 可参考 https github com fengbingchun OpenSSL Test blob master demo OpenSSL
  • Base64简介

    Base64是一种基于64个可打印字符来表示二进制数据的表示方法 由于2 6 61 64 xff0c 所以每6个比特为一个单元 xff0c 对应某个可打印字符 3个字节有24个比特 xff0c 对应于4个Base64单元 xff0c 即3个
  • HTTP协议简介

    HTTP HyperText Transfer Protocol 超文本传输协议 xff1a 是一种用于分布式 协作式和超媒体信息系统的应用层协议 HTTP是万维网的数据通信的基础 设计HTTP最初的目的是为了提供一种发布和接收HTML页面
  • HTTPS协议简介

    HTTPS HyperText Transfer Protocol Secure 超文本传输安全协议 xff1a 是一种透过计算机网络进行安全通信的传输协议 HTTPS经由HTTP进行通信 xff0c 但利用SSL TLS来加密数据包 HT
  • base64开源库介绍及使用

    网上有一些开源的base64编解码库的实现 xff0c 下面介绍几个 xff1a cppcodec是一个仅包括头文件的C 43 43 11库 xff0c 用于编解码RFC 4648中指定的base64 base64url base32 ba
  • Ubuntu下使用CMake编译OpenSSL源码操作步骤(C语言)

    OpenSSL的版本为1 0 1g xff0c 在ubuntu下通过CMake仅编译c代码不包括汇编代码 xff0c 脚本内容如下 xff1a build sh内容 xff1a bin bash real path 61 realpath
  • ImageNet图像数据集介绍

    ImageNet图像数据集始于2009年 xff0c 当时李飞飞教授等在CVPR2009上发表了一篇名为 ImageNet A Large Scale Hierarchical Image Database 的论文 xff0c 之后就是基于
  • 网络文件系统(NFS)简介

    网络文件系统 Network File System NFS 是一种分布式文件系统协议 xff0c 最初由Sun Microsystems公司开发 xff0c 并于1984年发布 其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服
  • 实时流协议(RTSP)简介

    RTSP Real Time Streaming Protocol xff0c RFC2326 xff0c 实时流传输协议 xff0c 是TCP IP协议体系中的一个应用层协议 xff0c 由哥伦比亚大学 网景 Netscape 和Real
  • 远程过程调用RPC简介

    RPC Remote Procedure Call 远程过程调用 xff1a 是一种通过网络从远程计算机程序上请求服务 xff0c 而不需要了解底层网络技术的思想 RPC是一种技术思想而非一种规范或协议 xff0c 常见RPC技术和框架有
  • C语言中头文件包含的处理原则

    很多事不深入以为自己懂了 xff0c 但真正用到项目上 xff0c 才发现了问题 曾以为自己写C语言已经轻车熟路了 xff0c 特别是对软件文件的工程管理上 xff0c 因为心里对自己的代码编写风格还是有自信的 毕竟刚毕业时老大对我最初的训

随机推荐

  • Unity3D物体自动躲避障碍物

    Unity版本 2017 4 4f1 基本思路 物体向前发射一个射线 xff0c 检测到碰撞后 xff0c 根据碰撞信息选择新的方向 最终结果如下 具体实现步骤代码 1 物体添加胶囊体碰撞组件CapsuleCollider 通过发射虚拟胶囊
  • nginx的请求接收流程(二)

    在ngx http process request line函数中 xff0c 解析完请求行之后 xff0c 如果请求行的uri里面包含了域名部分 xff0c 则将其保持在请求结构的headers in成员的server字段 xff0c h
  • C++学习_udp协议(socket)的封装

    C 43 43 学习笔记 xff0c UDP socket 协议的封装实现 1 配置QT下的pro文件 1 TEMPLATE 61 app 2 CONFIG 43 61 console 3 CONFIG 61 app bundle 4 CO
  • 西门子PLC学习笔记一(S7-300简介)

    使用了Step7有几天了 xff0c 现在系统的学习一下 xff0c 现记录一下学习的内容 1 S7 300硬件结构 S7 300或者S7 400的PLC是模块式的PLC xff0c 各种模块式相互独立的 xff0c 分别安装在机架上 硬件
  • 外网访问树莓派服务器(自购域名+Sakura Frp内网穿透)

    首先在域名代理商 xff08 如腾讯云 xff09 购买一个喜欢的域名 注册Sakura Frp账号 xff0c 进入管理面板后 xff0c 创建隧道 xff0c 服务器选择可建站类型的 xff0c 隧道类型为HTTP xff0c 本地地址
  • Python删除全部已安装的pip包

    pip freeze span class token operator gt span allpackages txt pip uninstall r allpackages txt y
  • Vue父组件主动获取子组件的值和方法

    在父组件使用子组件的代码中 xff0c 为子组件加上ref 61 34 name 自己设置一个名称 34 然后在代码中 xff1a span class token keyword this span span class token pu
  • 动态规划详解

    动态规划的入门 xff0c 一般是从斐波拉契数列开始 该数列由0和1开始 xff0c 后面的每一项数字都是前面两项数字的和 xff0c 定义如下 xff1a F 0 61 0 F 1 61 1 F n 61 F n 1 43 F n 2 其
  • Concept Whitening(for Interpretable Image Recognition)

    和BatchNorm相比有很多优点 xff0c 并且可以直接替换BatchNorm 有更好的interpretability xff08 可解释性 xff09 xff0c 可以可视化得解释神经网络层的含义 xff08 这是最突出的特点 xf
  • homebrew安装、换源

    首先确认你的Mac已经安装了命令行工具 xff1a Command Line Tools CLT for Xcode 打开终端 xff0c 输入git version xff0c 命令 xff0c 如果没有安装 xff0c macOS会跳出
  • macOS查看磁盘读写数据总量、磁盘健康、磁盘启动次数等信息

    首先确保安装了homebrew xff0c 如果没有安装可以按照这篇文章的教程安装 xff1a homebrew安装 换源 然后安装磁盘工具smartmontools brew span class token function insta
  • 30天自制C++服务器

    30天自制C 43 43 服务器 如访问慢 xff0c 可以到这里观看 xff1a csblog 教程的配套网络库 xff1a pine xff0c star and fork 先说结论 xff1a 不管使用什么语言 xff0c 一切后台开
  • 【C语言】之实现 printf 函数功能

    span class token comment 文件名 myPrintf c 文件功能 使用putchar函数模拟printf函数的功能 编辑人 王廷云 编辑时间 2017 10 14 修改时间 2018 1 12 span span c
  • 30天自制C++服务器day05-epoll高级用法-Channel登场

    在上一天 xff0c 我们已经完整地开发了一个echo服务器 xff0c 并且引入面向对象编程的思想 xff0c 初步封装了Socket InetAddress和Epoll xff0c 大大精简了主程序 xff0c 隐藏了底层语言实现细节
  • EasyVim:简单强大的VIM配置

    EasyVim 简单易用的vim配置 xff0c 熟练后可大大提高开发效率 xff08 VS Code的两倍以上 xff09 安装 安装过程需要从github下载很多插件 xff0c 国内尽量挂VPN span class token fu
  • README

    EasyVim 简单易用的vim配置 xff0c 熟练后可大大提高开发效率 xff08 VS Code的两倍以上 xff09 安装 安装过程需要从github下载很多插件 xff0c 国内尽量挂VPN span class token fu
  • C语言static和inline

    C语言static和inline C语言的static和inline的用法看似简单 但有很多坑 xff0c 一些编程老手也会犯错误 xff0c 网上也几乎很少有教程能讲清楚 下面先说结论 xff0c 再进行推导 xff1a 头文件里不能单独
  • STC51单片机学习笔记4——stc12c56 串口

    stc12c56 串口 xff08 没有用独立波特率发生器 xff0c 用T1不分频 中断式接受与发送 xff09 烧写程序时 xff0c 一定要选用外部晶振 xff08 烧写软件默认为内部晶振 xff08 5M 6M xff09 xff0
  • 如何直接使用别人的conda环境(免安装)

    如何直接使用别人的conda环境 xff08 免安装 xff09 1 复制conda文件夹2 修改配置文件3 修改环境路径和包路径4 修改环境路径和包路径 有时候为了更加方便 xff0c 可以直接使用其他用户的环境 xff0c 而不是自己重
  • 元组,字典,列表排序

    经常需要对元组或者字典等序列按照特定的规则进行排序 xff0c 如按照年龄进行排序 gt gt gt student tuples 61 39 john 39 39 A 39 15 39 jane 39 39 B 39 12 39 dave