嗨,我对这个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]
请帮助我,我是编程新手
谢谢!
答案 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或其他网站上获取问题