无法理解python代码中的lambda表达式

时间:2019-08-28 11:37:54

标签: python lambda expression

嗨,我对这个python代码有疑问:

def func():
    m=max(d1.values()
    return list(filter(lambda t: t[1]==max(d1.values()), d1.items()))[0][0]

在这里它返回字典的最大值:     dic={'a':1, 'b':2 ,'c':3}

我无法理解该表达方式:

list(filter(lambda t: t[1]==max(d1.values()), d1.items()))[0][0]    

请帮助我,我是编程新手

谢谢!

2 个答案:

答案 0 :(得分:0)

过滤器函数正在第二个参数中返回元素的迭代器,对此函数(第一个参数)将返回true(根据documentation)。第二个参数中的元素被逐一传递给函数。

在您的情况下,lambda正在检查d1.items()的传递元素是否等于该值列表max(d1.values())中最大元素的值。

我希望这可以为您澄清一下。

答案 1 :(得分:0)

首先,要从字典中找到价值最高的项目的代码段应如下所示

dic = {'a':1, 'b':2 ,'c':3}
reduce(lambda x,y: x if x[1] > y[1] else y, dic.iteritems())

说明:

lambda之后的参数数目对于过滤器和映射为单个,但对于减少为2。 所有的筛选,映射和归约都希望将可迭代对象作为第二个参数传递

过滤器的示例是

list(filter(lambda x: x % 2 == 0, [1, 3, 4, 5, 6]))

此处迭代发生在列表[1、3、4、5、6]上,每次迭代都会将一个值传递给匿名lambda函数。在上述情况下,它是 x lambda方法检查x%2 == 0,并返回True / False。如果为True,则过滤该项目,否则避免该项目并形成另一个列表。在这种情况下,只会选择偶数值,而会消除奇数值。

您可以了解有关lambda的更多信息,并且您可以使用它们的这些功能。您可以从w3school或hackerrank或其他网站上获取问题