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使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
零基础写python爬虫之抓取糗事百科代码分享
Nov 06 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
轻松理解Python 中的 descriptor
Sep 15 Python
python中logging模块的一些简单用法的使用
Feb 22 Python
Python3最长回文子串算法示例
Mar 04 Python
python变量命名的7条建议
Jul 04 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
pandas read_excel()和to_excel()函数解析
Sep 19 Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 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
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python定时执行之Timer用法示例
2015/05/27 Python
python中list列表的高级函数
2016/05/17 Python
浅述python2与python3的简单区别
2018/09/19 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
校园环保建议书
2014/05/14 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
英语教学课后反思
2016/02/15 职场文书