Python对列表内部的字典进行排序 --lambda,sort
我的需求
定义1个list类型的变量,名称是test
test包含3个元素,每个元素都是dict类型
现在我想要实现的是,按照每个dict中age值的大小对test的元素进行排序
需要借助lambda
test=[{'name':'Bob','age':14},{'name':'Lisa','age':16},{'name':'Sam','age':9}]
test.sort(key=lambda i:i['name'])
print(test)
test.sort(key=lambda i:i['age'],reverse=True)
print(test)
[{'name': 'Lisa', 'age': 16}, {'name': 'Bob', 'age': 14}, {'name': 'Sam', 'age': 9}]
如果不使用lambda,也可以单独定义1个函数来获取 排序的元素,像这样:
关键是弄清楚sort方法,key参数的使用规则
def getAge(elem):
return elem['age']
test.sort(key=getAge)
print(test)
[{'name': 'Sam', 'age': 9}, {'name': 'Bob', 'age': 14}, {'name': 'Lisa', 'age': 16}]
知识分解
Python-lambda用法
lambda函数也叫匿名函数,即,函数没有具体的名称
一、基础
lambda语句构建的其实是一个函数对象。匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
lembda(a,b:a+b)
#关键字lembda表示匿名函数,冒号前是参数,可以有多个,用逗事情隔开,冒号右边的返回值
lembda的优点:
- 使用python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简
- 对于一些抽象的,不会别的地方复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
- 使用lambda在某些时候让代码更容易理解。
举一个简单的例子:
def f(x):
return x*2
print (f(4))
8
python中使用lambda的话,写成这样
g=lambda x:x*2
print(g(4))
8
二、进阶-内置函数
map()
遍历序列,对序列中的每个元素进行操作,最终获取新的序列
li=[11,22,33]
sl=[1,2,3]
new_list=map(lambda a,b:a+b,li,sl)
print(new_list)#map方法会返回一个filter对象
<map object at 0x7f31e83aad30>
print(list(new_list))
[12, 24, 36]
reduce()
对于序列内所有元素进行累计操作
from functools import reduce
li=[11,22,33]
result = reduce(lambda a,b :a+b,li)
#reduce的第1个参数,函数必须要有2个参数
#reduce的第2个参数,要循环的序列
#reduce的第3个参数,初始值
print(result)
66
filter()
对序列中的元素进行筛选,最终获取符合条件的序列
li=[11,22,33]
new_list=filter(lambda a:a>22,li)
print(new_list)#filter方法会返回一个filter对象
<filter object at 0x7f31e9170e48>
print(list(new_list))
[33]
sort函数
先来熟悉一下普通的排序方式
如果是对list类型数据进行排序,可以使用list.sort()方法,该方法会直接修改原list元素的排列顺序
b=[4,16,9]
b.sort()
b
[4, 9, 16]
b.sort(reverse=True)
b
[16, 9, 4]
如果只使用reverse()方法,可以对列表进行逆序显示
c=[3,5,1]
c.reverse()
c
[1, 5, 3]
语法
sort()函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数
语法:
list.sort(key=None,reverse=False)
参数
- key --主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代的一个元素进行排序。
- reverse --排序规则,reverse=True 降序,reverse=False 升序(默认)
返回值
该方法没有返回值,但是会对列表的对象进行排序。
示例
alist=['Bob','Tom','Zara','Lisa']
alist.sort()#默认升序
alist
['Bob', 'Lisa', 'Tom', 'Zara']
alist.sort(reverse=True)#降序
alist
['Zara', 'Tom', 'Lisa', 'Bob']
通过指定列表中的元素进行排序
def takeSecond(elem):
return elem[1]
random=[(1,4),(5,2,),(1,9)]
random.sort(key=takeSecond)
random
[(5, 2), (1, 4), (1, 9)]