我正在查看python中按值排序字典的问题,并且遇到了这个答案。
sorted(d.items(), key=lambda x: x[1])
但是,我不明白这个函数到底是做什么的,它如何通过返回元组列表或任何事情来帮助对字典进行排序
答案 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(原始字典的值字段)排序。