Python中sorted函数使用,一看就会

简介: Python中sorted函数使用,一看就会

我们需要对List、Dict进行排序,Python提供了两个方法

对给定的List L进行排序,

方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本

方法2.用built-in函数sorted进行排序(从2.4开始),返回副本,原始输入不变

 

--------------------------------sorted---------------------------------------

>>> help(sorted)

Help on built-in function sorted in module __builtin__:

 

sorted(...)

   sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

---------------------------------sort----------------------------------------

>>> help(list.sort)

Help on method_descriptor:

 

sort(...)

   L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

   cmp(x, y) -> -1, 0, 1

-----------------------------------------------------------------------------

 

iterable:是可迭代类型;

cmp:用于比较的函数,比较什么由key决定;

key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;

reverse:排序规则. reverse = True  降序 或者 reverse = False 升序,有默认值。

返回值:是一个经过排序的可迭代类型,与iterable一样。

 

参数说明:

(1)  cmp参数

cmp接受一个函数,拿整形举例,形式为:

def f(a,b):

    return a-b

如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了

 

(2)  key参数

key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下

def f(a):

    return len(a)

key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序

 

(3) reverse参数

接受False 或者True 表示是否逆序

 

 

例子:

(1)按照元素长度排序

L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]

def f(x):

   return len(x)

sort(key=f)

print L

 

输出:

[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]

 

 

(2)按照每个字典元素里面key为1的元素的值排序

L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]

def f2(a,b):

   return a[1]-b[1]

L.sort(cmp=f2)

print L

. 对由tuple组成的List排序

Python代码

  1. >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]  

 

 

用key函数排序:返回由tuple组成的list

Python代码

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

 

 

用cmp函数排序

Python代码

  1. >>> sorted(students, cmp=lambda x,y : cmp(x[2], y[2])) # sort by age  
  2. [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]  

 

 

用 operator 函数来加快速度,

Python代码  

  1. >>> from operator import itemgetter, attrgetter  
  2. >>> sorted(students, key=itemgetter(2))  

 

 

用 operator 函数进行多级排序

Python代码  

  1. >>> sorted(students, key=itemgetter(1,2))  # sort by grade then by age  
  2. [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]  

 

 

2. 对由字典排序 ,返回由tuple组成的List,不再是字典。

Python代码

  1. >>> d = {'data1':3, 'data2':1, 'data3':2, 'data4':4}  
  2. >>> sorted(d.iteritems(), key=itemgetter(1), reverse=True)  
  3. [('data4', 4), ('data1', 3), ('data3', 2), ('data2', 1)]  
目录
相关文章
|
2天前
|
Python
Python闭包函数和计时器
本文介绍了闭包函数的概念,它允许内部函数引用外部作用域的变量但无法修改它们。示例展示了如何使用闭包来封装函数。接着,文章讨论了如何在函数调用时添加开始和结束的打印语句,通过传递函数作为参数实现。然后,文章引入装饰器,通过闭包定义了一个`timer`装饰器,用于在函数执行前后打印消息。最后,给出了一个练习,实现了一个计算函数执行时间的装饰器,处理了带有参数的被装饰函数。
12 1
|
22小时前
|
机器学习/深度学习 数据采集 自然语言处理
python函数参数的传递、带星号参数的传递,2024年大厂Python高级面试题分享
python函数参数的传递、带星号参数的传递,2024年大厂Python高级面试题分享
|
1天前
|
Python
Python 使用type()函数
【5月更文挑战第10天】
11 4
|
1天前
|
Python
Python使用isinstance()函数
【5月更文挑战第10天】Python使用isinstance()函数
9 2
|
1天前
|
缓存 Python
Python中的装饰器:优雅而强大的函数装饰技术
在Python编程中,装饰器是一种强大而灵活的技术,它可以使函数具有额外的功能,而不需要改变函数的核心代码。本文将深入探讨装饰器的原理、用法以及实际应用场景,帮助读者更好地理解和利用这一重要的Python编程工具。
|
2天前
|
Python
PyQt---------信号与槽函数的关系
PyQt---------信号与槽函数的关系
11 1
|
2天前
|
测试技术 开发者 Python
Python检查函数和方法的输入/输出
【5月更文挑战第5天】Python检查函数和方法的输入/输出
13 1
|
2天前
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
23 2
|
2天前
|
Python
【Python操作基础】——函数
【Python操作基础】——函数
|
2天前
|
Python
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。
【5月更文挑战第11天】Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。在函数内部修改全局变量需用`global`关键字声明,否则会创建新局部变量。
104 2