m0_70680242 2022-07-01 13:27 采纳率: 82.2%
浏览 39
已结题

sort中key和lambda写法交互出现错误

程序本身要求可以根据"grade"进行排列


students = [
    {"sno":101,"name":"小张","grade":88},
    {"sno":102,"name":"小王","grade":90},
    {"sno":103,"name":"小李","grade":108},
    {"sno":104,"name":"小赵","grade":68},
]
student_sort = sorted(students,key=lambda X:X["grade"])
print(student_sort)
#尝试令lambda X:X["grade"]等价于students["grad]"]#
student_sort_02 = sorted(students,key=students["grad"])
print(student_sort_02)
#运行后报错证明完全错误#
#错误代码TypeError: list indices must be integers or slices, not str#

对于题中lambda的理解如下:
#student_sort = sorted(students,key=lambda X:X["grade"]))
lambda X:X["grade"]可以认为设置了一个X作为临时变量
问题如下:
1,X["grade"]可能解释为 遍历所有字典的["grade"] ,这种理解是否正确?若错误正确的解释方式是?

  • 写回答

1条回答 默认 最新

  • 於黾 2022-07-01 13:36
    关注

    1.lambda 定义了一个匿名函数
    2.X不过就是匿名函数的形参而已,它本身没任何意义,你也可以定义多个形参,这样lambda x,y:x+y
    3.传入的x到底是什么,是要看情况的
    针对你这个代码,你把匿名函数传入了key的位置,那么形参传入的其实是students的每一项
    而你students的每一项都是个字典,所以x["grade"]获取到的是students的每一项的key是grade的值
    而你后面的代码里,传入的是grad,少写了个e,字典里没有这个key,能不报错吗
    4.即使你的key没有写错,你这样的写法也是完全错误的
    因为key的位置要求传入一个函数,而你传入的根本就不是函数
    5.key的位置要求传入函数,可以不是匿名函数,比如你可以写max(students)
    sort只是根据函数的返回值大小来排序而已,跟你传入的到底是匿名函数还是系统函数还是自定义函数无关

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 7月2日
    • 已采纳回答 7月1日
    • 修改了问题 7月1日
    • 创建了问题 7月1日

    悬赏问题

    • ¥20 用Power Query整合的问题
    • ¥20 基于python进行多背包问题的多值编码
    • ¥15 相同型号电脑与配置,发现主板有一台貌似缺少了好多元器件似的,会影响稳定性和使用寿命吗?
    • ¥15 要求编写稀疏矩阵A的转置矩阵的算法
    • ¥15 编写满足以下要求的停车场管理程序,设停车场只有一个可停放n辆车的狭窄通道且只有一个大门可供车辆进出。
    • ¥15 C语言:数据子序列基础版
    • ¥20 powerbulider 导入excel文件,显示不完整
    • ¥15 用keil调试程序保证结果进行led相关闪烁
    • ¥15 paddle训练自己的数据loss降不下去
    • ¥20 用matlab的pdetool解决以下三个问题