Python中列表的排序
给定一个列表:lst = [['John',3],['Blake',4],['Ted',3]]
结果应该是:lst = [['John',3],['Ted',3],['Blake',4]]
我想找一种方法来对这个包含列表的列表进行排序,先按数字排序,然后再按字母排序,而且不想用“itemgetter”这种写法。
5 个回答
2
我觉得这个问题之前可能有人问过,具体可以参考这个链接:
这里是Dave Webb给出的解释:
在sort
函数中,key
参数是一个接受一个参数的函数,用来从每个列表元素中提取出用于比较的关键字。 所以我们可以创建一个简单的lambda
函数,它返回每一行的最后一个元素,用于排序:
c2.sort(key = lambda row: row[2])
一个lambda
是一个简单的匿名函数。 当你想创建一个简单的、只用一次的函数时,它非常方便。 如果不使用lambda
,相同的代码会是:
def sort_key(row):
return row[2]
c2.sort(key = sort_key)
如果你想根据多个条目进行排序,只需让key
函数返回一个元组,里面包含你希望按重要性排序的值。例如:
c2.sort(key = lambda row: (row[2],row[1]))
或者:
c2.sort(key = lambda row: (row[2],row[1],row[0]))
2
你可以使用内置的 sorted
函数中的 key
参数。
在这个 key
参数中,你可以传入一个带有一个参数的函数,这个函数会返回一个值,用来进行排序,而不是直接根据列表中的元素来排序。
def my_func(elem):
# return a tuple (second element, first element)
return (elem[1], elem[0])
>>> lst = [['John',3],['Blake',4],['Ted',3]]
>>> sorted(lst, key=my_func)
[['John', 3], ['Ted', 3], ['Blake', 4]]
或者可以更简洁一些:
>>> sorted(lst, key=lambda x: (x[1],x[0]))
[['John', 3], ['Ted', 3], ['Blake', 4]]
无论哪种方式,你都是先按数字排序,然后再按字母排序。
5
既然你坚持要知道:
lst.sort(key=lambda x: x[::-1])