Python 使用多属性来进行排序


Posted in Python onSeptember 01, 2019

Python 中 list.sort() 是列表中非常常用的排序函数, key 参数可以对单个属性进行排序。

但是想要实现类似 sql 中 order by id, age 一样,对多个字段进行排序就不支持了。

py2 中 sort() 函数还有个 cmp 参数可以传入一个方法,可以自定义对多个属性进行排序,py3 中移除了这个字段。

py3 想要实现这个功能,需要使用 functools 模块中的方法,实例如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: wxnacy(wxnacy@gmail.com)

from functools import cmp_to_key

def cmp_func(a, b):

  if a['id'] < b['id']:
    return -1
  elif a['id'] > b['id']:
    return 1

  if a['name'] < b['name']:
    return -1
  elif a['name'] > b['name']:
    return 1

  return 0

arr.sort(key=cmp_to_key(cmp_func))

上面的例子我们实现了 id 正序排序,如果 id 相同,则按照 age 正序排序

为了方便可以封装成一个方法,以供列表调用,封装的方法 demo 可以参见地址

https://github.com/wxnacy/study/blob/master/python/office_module/list_demo/sort_by_multi_fields.py

总结

以上所述是小编给大家介绍的Python 使用多属性来进行排序,希望对大家有所帮助,如果大家有任何疑问欢迎给大家留言,小编会及时回复大家的!

Python 相关文章推荐
Python生成随机密码的方法
Jun 16 Python
Python生成数字图片代码分享
Oct 31 Python
理解python中生成器用法
Dec 20 Python
python实战串口助手_解决8串口多个发送的问题
Jun 12 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
python logging日志模块原理及操作解析
Oct 12 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
利用Python实现Json序列化库的方法步骤
Sep 09 Python
Python偏函数实现原理及应用
Nov 20 Python
python 操作excel表格的方法
Dec 05 Python
python批量生成身份证号到Excel的两种方法实例
Jan 14 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 #Python
python实现多进程通信实例分析
Sep 01 #Python
python输出带颜色字体实例方法
Sep 01 #Python
基于Django框架的权限组件rbac实例讲解
Aug 31 #Python
Django之PopUp的具体实现方法
Aug 31 #Python
对django layer弹窗组件的使用详解
Aug 31 #Python
python2.7实现复制大量文件及文件夹资料
Aug 31 #Python
You might like
example2.php
2006/10/09 PHP
ucenter通信原理分析
2015/01/09 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
布同自制Python函数帮助查询小工具
2011/03/13 Python
Python操作Word批量生成文章的方法
2015/07/28 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
python绘制雪景图
2019/12/16 Python
用python批量下载apk
2020/12/29 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
普通大学毕业生自荐信范文
2014/02/23 职场文书
财产保全担保书范文
2014/04/01 职场文书
道歉信怎么写
2015/05/12 职场文书
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
python pygame 开发五子棋双人对弈
2022/05/02 Python