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 list中append()与extend()用法分享
Mar 24 Python
在Python的Django框架中编写编译函数
Jul 20 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
在pycharm中设置显示行数的方法
Jan 16 Python
python 并发下载器实现方法示例
Nov 22 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
浅谈django channels 路由误导
May 28 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
python opencv肤色检测的实现示例
Dec 21 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 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
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
Open and Print a Word Document
2007/06/15 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
类似CSDN图片切换效果脚本
2009/09/17 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
Python爬取梨视频的示例
2021/01/29 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
前台接待的工作职责
2013/11/21 职场文书
商场中秋节活动方案
2014/02/07 职场文书
少年闰土教学反思
2014/02/22 职场文书
欠条范文
2015/07/03 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers