这个lambda函数做了什么

时间:2015-05-25 01:51:02

标签: python dictionary tuples

我正在查看python中按值排序字典的问题,并且遇到了这个答案。

sorted(d.items(), key=lambda x: x[1])

但是,我不明白这个函数到底是做什么的,它如何通过返回元组列表或任何事情来帮助对字典进行排序

4 个答案:

答案 0 :(得分:1)

这个lambda接受一个list / tuple作为参数,并返回第二个位置的元素:x[1]

它可用于对列表进行排序,例如:

[['b',2], ['a',4], ['c',1]]

sort将使用lambda表达式提取每个列表中的第二个元素:2,4,1并根据此元素对列表进行排序。

所以这个例子的输出将在我们的例子中:

[['c', 1], ['b', 2], ['a', 4]]

评论:同样的排序可以应用于 more 而不是2个元素的任何列表序列!

答案 1 :(得分:1)

据推测,你有一本字典要列入一个列表。

例如

IList<IFoo> list = new List<IFoo>{new Foo(/* construct */)};

现在您还要确保此输出列表按值(5和6)排序 - 因为这并不总能保证。

因此,您将其传递到{'x': 5, 'y': 6}.items() # returns [(x, 5), (y, 6)] 函数,并传入sort,其中明确指出您希望如何对此列表进行排序。

例如,在您的情况下,您要按列表lambda中每对的第二个值进行排序,但您也可以按每对{CM 1}的第一个值排序x[1]

您还可以使用常规函数替换lambda:

x[0]

答案 2 :(得分:1)

让我们创建一个示例字典。

d = {'e': 1, 'd': 2, 'c': 3, 'b': 4, 'a': 5}

items会将字典中的项目作为键值元组对返回。

>>> d.items()
[('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)]

`排序&#39;单独对字典中的键进行排序:

>>> sorted(d)
['a', 'b', 'c', 'd', 'e']

&#39; sorted(d.items())`将按键按升序对字典进行排序:

>>> sorted(d.items())
[('a', 5), ('b', 4), ('c', 3), ('d', 2), ('e', 1)]

然而,传递lambda函数使用对中的第二项(即值)作为排序的基础。 x表示元组对(例如(&#39; b&#39;,4),x [1]在这种情况下代表4)。:

>>> sorted(d.items(), key=lambda x: x[1])
[('e', 1), ('d', 2), ('c', 3), ('b', 4), ('a', 5)]

排序顺序也可以颠倒过来:

>>> sorted(d.items(), key=lambda x: x[1], reverse=True)
[('a', 5), ('b', 4), ('c', 3), ('d', 2), ('e', 1)]

答案 3 :(得分:1)

函数key的参数sorted只允许您指定一个接受项目(您要排序的列表)的函数,并返回您想要排序的值。

d.items()是一个元组列表,其中包含两个字段:(dict_key, dict_value)

lambda x: x[1]等于def anonymous_func(x): return x[1],因此在您的代码中,列表(d.items())将按字段1(原始字典的值字段)排序。