考慮: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