• 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语言中列表中的字典类型元素排序

  • 相关阅读:
    中文简体汉字
    文件下载
    javaBean
    servlet和JSP笔记(EL表达式、javabean、jsp九大内置对象等)
    Http请求和响应
    Eclipse快捷键(可更新)
    反射笔记①
    泛型, 枚举,单例模式
    Ubuntu 14.04 安装 A卡HD7750 官方闭源 显卡驱动
    C语言--二维数组,字符串数组,多维数组
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/13042141.html
Copyright © 2020-2023  润新知