首先,要知道sorted 內部實現使用了歸並排序,而歸並排序是穩定的排序,就是說當元素比不出大小時,其相對位置是不變的。
那么,利用穩定排序的特性,key函數有幾個返回值就排序幾次,先排序次要條件,后排序主要條件,用主要條件覆蓋次要條件,主要條件相同時,又不會改變之前排好的次要條件的相對位置,就實現了多條件排序。
給我們的直觀效果是,主要條件排不出先后順序的元素,就按照次要條件排序。
在python中具體是如何實現的呢?
sorted(iterable, key, reverse)
key參數,接收一個函數地址,用來設置排序條件,這里我們經常使用匿名函數。
iterable的每一個元素作為參數傳入key函數,key函數的返回值就是排序依據,當返回值為一個元祖時,這個元祖中的多個元素即為多個排序條件,從前到后重要程度依次降低。
下面的例子,演示按照元素第三位、第二位、第一位的字典順序這三個條件對列表進行排序。
lis = ['a1b', 'a2a', 'a3b', 'b5d', 'a4f', 'c3f', 'b3f', 'a6f', 'c1f', 'a1a'] print(sorted(lis, key=lambda x: (x[2], x[1], x[0])))
排序結果:['a1a', 'a2a', 'a1b', 'a3b', 'b5d', 'c1f', 'b3f', 'c3f', 'a4f', 'a6f']