本文主要是介绍用 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 = gradeself.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, attrgettersorted(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)]
================================ 这是这次用到的排序,以后还有再加===============================================
这篇关于用 Python 排序数据的多种方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!