python实现对象列表根据某个属性排序的方法详解


Posted in Python onJune 11, 2019

本文实例讲述了python实现对象列表根据某个属性排序的方法。分享给大家供大家参考,具体如下:

对于一个已有的python list, 里面的内容是一些对象,这些对象有一些相同的属性值, 在一些特定的情况下,需要自己选择特定的排序,也就是根据某一个具体的属性来排序,在网上找了下资料,一般来说有两种方法,但从根本上来说,还是调用了list.sort 方法来实现。下面是简单的测试代码片段:

#coding:utf-8
class Person:
  def __init__(self,name,age,salary):
    self.name = name
    self.age = age
    self.salary = salary
obj_list = [
      Person('juneys',20,30000),
      Person('sam',20,20000),
      Person('eddy',22,25000),
      Person('eagle',25,10000)
      ]
#第一种方法
obj_list.sort(cmp=None, key=lambda x:x.salary, reverse=False)
print '***********第一种方法***********************'
for obj in obj_list:
  print obj.name,obj.salary
# 第二种方法,更适合于大量数据的情况.
try:
  import operator
except ImportError:
  cmpfun= lambda x: x.count # use a lambda if no operator module
else:
  cmpfun= operator.attrgetter("salary") # use operator since it's faster than lambda
obj_list.sort(key=cmpfun, reverse=True)
print '***********第二种方法***********************'
for obj in obj_list:
  print obj.name,obj.salary

构造了一个 Person 类, 然后初始化一些对象放入obj_list 中, 然后想根据工资进行排序,方法一与方法二分别实现了升序或者降序。 以此类推还可以实现按年龄排序等.

本例结果如下:

***********第一种方法***********************
eagle 10000
sam 20000
eddy 25000
juneys 30000
***********第二种方法***********************
juneys 30000
eddy 25000
sam 20000
eagle 10000

Python 相关文章推荐
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
详解重置Django migration的常见方式
Feb 15 Python
pycharm新建一个python工程步骤
Jul 16 Python
pandas的排序和排名的具体使用
Jul 31 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
python入门之井字棋小游戏
Mar 05 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 Python
python接入支付宝的实例操作
Jul 20 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 #Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 #Python
python flask框架实现传数据到js的方法分析
Jun 11 #Python
python 求一个列表中所有元素的乘积实例
Jun 11 #Python
python ChainMap的使用和说明详解
Jun 11 #Python
python 计算一个字符串中所有数字的和实例
Jun 11 #Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 #Python
You might like
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
JS 建立对象的方法
2007/04/21 Javascript
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
python操作mysql数据库
2017/03/05 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
python3中rank函数的用法
2019/11/27 Python
python如何把字符串类型list转换成list
2020/02/18 Python
python deque模块简单使用代码实例
2020/03/12 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
python eventlet绿化和patch原理
2020/11/21 Python
python线程优先级队列知识点总结
2021/02/28 Python
医学生个人求职信范文
2013/09/24 职场文书
中专毕业自我鉴定
2013/10/16 职场文书
竞聘上岗演讲稿范文
2014/01/10 职场文书
查摆剖析材料范文
2014/09/30 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
消夏晚会主持词
2015/06/30 职场文书
win10下go mod配置方式
2021/04/25 Golang
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
python 详解turtle画爱心代码
2022/02/15 Python