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:14 编辑
首先, sorted是个排序函数,第一个参数rows是需要排序的列表,第二个参数key是一个排序条件,key一般是取列表中元素的一个特征,可以用表达式给出,也可以用一个函数表示,这里使用的是一个匿名函数。
rows列表中每一个元素都是一个字典,而且字典的key都是一样的,分别为 'fname', 'lname', 'uid'。这个lambda取的是字典的key='fname',也就是将列表中的四个元素按照元素的 'fname' 进行排序。最终结果也可以看出来,排序结果是 Big BrianDavidJohn
举个实际例子吧。
有四个学生,他们有自己的姓(fname),名字(lname)和学号(uid),老师给他们排队,然后需要给出排队规则吧,否则他们也不知道怎么排嘛。这里就让他们按照姓(fname)的先后顺序排队,排队的时候肯定需要吧每个人叫出来,看看他们的姓(fname) ,每个人都有自己的姓(fname)怎么会发生指代错误呢 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
lambda r: r['fname']
lambda可以理解为:
def niming(r):
return r['fname']
匿名函数,就是为了代码更加简洁 sorted()是一个排序函数,它的第一个参数是一个需要排序的序列(列表,元组,字符串等等),他的key参数接受一个callable对象(可以调用的对象,可以理解成一个函数),把这个key参数所指定的函数作用于序列的每个元素(可以理解为把序列中的每个元素做为参数,来调用key参数所指定的函数),再用各自得到返回结果,做为排序的依据进行排序,可能说的啰嗦了点,多看几遍,应该能看的很明白吧 挥舞乾坤 发表于 2020-9-15 10:26
sorted()是一个排序函数,它的第一个参数是一个需要排序的序列(列表,元组,字符串等等),他的key参数接 ...
谢谢
页:
[1]