考虑:lst = [['John',3],['Blake',4],['Ted',3]]
Python的排序列表中列出
结果:lst = [['John',3],['Ted',3],['Blake',4]]
我正在寻找一种方法来在列表中列出了第一数字,然后按字母顺序排列,而不使用“itemgetter”语法的排序。
考虑:lst = [['John',3],['Blake',4],['Ted',3]]
Python的排序列表中列出
结果:lst = [['John',3],['Ted',3],['Blake',4]]
我正在寻找一种方法来在列表中列出了第一数字,然后按字母顺序排列,而不使用“itemgetter”语法的排序。
既然你坚持:
lst.sort(key=lambda x: x[::-1])
这有什么错itemgetter?
lst.sort(key=lambda l: list(reversed(l))
应该做的伎俩
你可以从使用参数key
内置sorted
功能。
在这个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]]
在这两种方式,您排序第一数字,然后按字母顺序排列。
我想,这可能是在下面的问题之前问:
Sorting a list of lists in Python
这里是由戴维·韦伯给出的解释:
The key
argument to sort
指定用于一个参数的函数从每个列表元素中提取一个比较键。因此,我们可以创建一个简单的lambda
返回从各行的最后一个元素在排序中使用:
c2.sort(key = lambda row: row[2])
A lambda
is a simple anonymous function.当你想创建这样一个简单的单一的使用功能很方便。等效代码不使用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]))
在Python2,您可以使用此
>>> lst = [['John',3],['Blake',4],['Ted',3]]
>>> lst.sort(key=sorted)
>>> lst
[['John', 3], ['Ted', 3], ['Blake', 4]]
这工作,因为整数是Python2
总是 “小于” 字符串你不能在Python3中对str
和int
对象进行排序,尽管
我认为Python建议在'.sort()之前使用'sorted()''http://docs.python.org/howto/sorting.html#sorting-basics – juliomalegria