李万金 发表于 2020-9-15 09:17:32

lambda表达式

>>> rows = [
    {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
    {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
>>> rows_by_fname = sorted(rows, key=lambda r: r['fname'])
>>> print(rows_by_fname)
[{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}, {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]


(萌新)lambda的参数r我猜测是指代列表rows里的字典,我想不通的是列表里字典有四个,怎么一个r就能指代而不引发错误。

sunrise085 发表于 2020-9-15 10:10:14

本帖最后由 sunrise085 于 2020-9-15 10:14 编辑

首先, sorted是个排序函数,第一个参数rows是需要排序的列表,第二个参数key是一个排序条件,key一般是取列表中元素的一个特征,可以用表达式给出,也可以用一个函数表示,这里使用的是一个匿名函数。

rows列表中每一个元素都是一个字典,而且字典的key都是一样的,分别为 'fname', 'lname', 'uid'。这个lambda取的是字典的key='fname',也就是将列表中的四个元素按照元素的 'fname' 进行排序。最终结果也可以看出来,排序结果是 Big BrianDavidJohn

举个实际例子吧。
有四个学生,他们有自己的姓(fname),名字(lname)和学号(uid),老师给他们排队,然后需要给出排队规则吧,否则他们也不知道怎么排嘛。这里就让他们按照姓(fname)的先后顺序排队,排队的时候肯定需要吧每个人叫出来,看看他们的姓(fname) ,每个人都有自己的姓(fname)怎么会发生指代错误呢

fall_bernana 发表于 2020-9-15 10:14:35

sorted 语法:
sorted(iterable, key=None, reverse=False)
参数说明:
iterable -- 可迭代对象。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值
返回重新排序的列表。

遍历列表里的字典是sorted干的。lambda只是处理每一个字典。
rows = [
    {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
    {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
show=lambda r: r['fname']
for a in rows:
    print(show(a))
---------------------------
Brian
David
John
Big

疾风怪盗 发表于 2020-9-15 10:17:34

lambda r: r['fname']

lambda可以理解为:
def niming(r):
    return r['fname']
匿名函数,就是为了代码更加简洁

挥舞乾坤 发表于 2020-9-15 10:26:30

sorted()是一个排序函数,它的第一个参数是一个需要排序的序列(列表,元组,字符串等等),他的key参数接受一个callable对象(可以调用的对象,可以理解成一个函数),把这个key参数所指定的函数作用于序列的每个元素(可以理解为把序列中的每个元素做为参数,来调用key参数所指定的函数),再用各自得到返回结果,做为排序的依据进行排序,可能说的啰嗦了点,多看几遍,应该能看的很明白吧

李万金 发表于 2020-9-15 11:03:04

挥舞乾坤 发表于 2020-9-15 10:26
sorted()是一个排序函数,它的第一个参数是一个需要排序的序列(列表,元组,字符串等等),他的key参数接 ...

谢谢
页: [1]
查看完整版本: lambda表达式