用 Python 排序数据的多种方法

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)]

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

上一篇:精彩回顾 丨 CyberVein & Cointelegraph中文 AMA:DAVE如何用区块链解答数据间的量子纠缠


下一篇:我在服务器上执行了 rm -rf *