我试图了解lambda在groupby或sort函数中使用时的工作方式,例如,我得到了一个对象列表,每个对象都有两个属性:name和surname我想按name和surname进行分组,并且尝试了两种tings:
list.sort(key=lambda x: x.name and x.surname)
list.sort(key=lambda x: (x.name, x.surname))
然后分组
groupby(list, lambda x: x.name and x.surname)
groupby(list, lambda x: (x.name,x.surname))
我注意到排序和分组的第一个示例不能很好地工作,在这种情况下,lambda是如何工作的?有没有什么好的方法可以测试lambda函数的作用?
谢谢!
最佳答案
让我们看看给定对象的lambda x: x.name and x.surname
返回什么:
class People(object):
def __init__(self, name, surname):
self.name = name
self.surname = surname
name_and_surname = lambda p: p.name and p.surname
然后:
print(name_and_surname(People("Bill", "Gates"))) # will print "Gates"
print(name_and_surname(People("Name", "Surname"))) # will print "Surname"
这是因为对
x.name and x.surname
内的表达式lambda
的求值是,它将按and
“拆分”表达式,然后一个个地评估每个单个表达式,无论返回第一个falsy
值还是最后一个表达式值是什么,以name_and_surname(People("Name", "Surname"))
为例评估
x.name
并获取值"Name"
,这是一个truthy
值,请跳过它评估
x.surname
并返回它,即"Surname"
因此,当您使用
lambda x: x.name and x.surname
作为键功能时,实际上您是在使用lambda x: x.surname
关于python - 排序/分组中的Lambda函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42721394/