我试图了解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/

10-11 09:05