ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用 Python 排序数据的多种方法

2019-06-06 09:49:31  阅读:243  来源: 互联网

标签:多种 john 10 Python age dave student jane 排序


Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭代对象(iterable)排序为一个新的有序列表。

student_tuples = [ ('john', 'A', 15),   
  		   ('jane', 'B', 12),  
  		   ('dave', 'B', 10)]
sorted(student_tuples, key=lambda student: student[2])   
# sort by age[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

同样的技巧也可以用在带有命名属性(named attributes)的对象上。

class Student:       
          def __init__(self, name, grade, age):        
              self.name = name     
              self.grade = grade
              self.age = age        
          def __repr__(self):
               return repr((self.name, self.grade, self.age))

student_objects = [ Student('john', 'A', 15),    
		    Student('jane', 'B', 12),    
		    Student('dave', 'B', 10)]
 
 sorted(student_objects, key=lambda student: student.age)   
 
 # sort by age[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

上述的 key 函数模式是非常常见的,所以 Python 提供了一些更简单快速的访问属性的函数。
operator 模块有 itemgetter()、attrgetter() 和 methodcaller() 函数。
Using those functions, the above examples become simpler and faster: 使用这些函数,可以使上述的示例更加简洁高效

from operator import itemgetter, attrgetter

sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

operator 模块方法允许多级排序。例如,可以先按 grade 排序,然后再按 age 排序

   sorted(student_tuples, key=itemgetter(2), reverse=True)
    [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    
或

  sorted(student_objects, key=attrgetter('age'), reverse=True)
   [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

================================ 这是这次用到的排序,以后还有再加===============================================

标签:多种,john,10,Python,age,dave,student,jane,排序
来源: https://blog.csdn.net/u013411246/article/details/91038986

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有