按任意lambda排序
我该如何根据一个任意函数描述的关键字来对列表进行排序呢?比如说,如果我有:
mylist = [["quux", 1, "a"], ["bar", 0, "b"]]
我想根据每个成员的第二个元素来排序“mylist”,比如:
sort(mylist, key=lambda x: x[1])
我该怎么做呢?
6 个回答
10
这个需求非常常见,所以在标准库中增加了对它的支持,具体是通过operator.itemgetter
这个工具来实现的:
from operator import itemgetter
mylist = [["quux", 1, "a"], ["bar", 0, "b"]]
mylist.sort(key=itemgetter(1)) # or sorted(mylist, key=...)
10
其实你有两个选择,跟你描述的非常接近:
mylist.sort(key=lambda x: x[1]) # In place sort
new_list = sorted(mylist, key=lambda x: x[1])
55
你基本上已经有了:
>>> mylist = [["quux", 1, "a"], ["bar", 0, "b"]]
>>> mylist.sort(key=lambda x: x[1])
>>> print mylist
这会得到:
[['bar', 0, 'b'], ['quux', 1, 'a']]
这段代码会直接对 mylist 进行排序。
[这一段感谢 @Daniel 的纠正进行了编辑。] sorted
会返回一个新的已排序列表,而不是直接改变原来的输入,具体可以参考这个链接:http://wiki.python.org/moin/HowTo/Sorting/。