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中使用__slots__方法的详细教程
Apr 28 Python
详解Django通用视图中的函数包装
Jul 21 Python
在Python中的Django框架中进行字符串翻译
Jul 27 Python
Python监控主机是否存活并以邮件报警
Sep 22 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
python opencv 图像尺寸变换方法
Apr 02 Python
如何基于Python实现数字类型转换
Feb 07 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
Python headers请求头如何实现快速添加
Nov 03 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 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
php explode函数实例代码
2012/02/27 PHP
php输入流php://input使用浅析
2014/09/02 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python iter()函数用法实例分析
2018/03/17 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
门卫岗位职责
2013/11/15 职场文书
创意广告词
2014/03/17 职场文书
迟到检讨书
2015/01/26 职场文书
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android