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的优点:

  1. 使用python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简
  2. 对于一些抽象的,不会别的地方复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
  3. 使用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)]

参考文档

Python-lambda用法
如何实现python语言中列表中的字典类型元素排序

posted @ 2020-06-04 10:49  wangju003  阅读(3244)  评论(0编辑  收藏  举报