從網路上看到的, 挺實用的 所以記錄一下.

sorted()

首先要先介紹 sorted() function. 他的default parameter就是一個list. 目的就是對這個list做排序. 如以下範例

>>> sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]

那如果要對dict做排序的話就需要使用sorted(items, key)這兩個parameters. key的功用就是用來決定排序的元素. 如以下範例

>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

>>> sorted(students, key=lambda student: student[1]) 
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] 

>>> sorted(students, key=lambda student: student[2])
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

lambda

上面的例子有提到lambda function, lambda function是python中提供讓你實作出很簡單的function(通常指一個運算式)的用法

上面的例子中: key=lambda student: student[1]

其中 : 這個符號為分界左邊為input右邊為output, 所以它實際上等於

lambda student: student[1]

def fun(student):
    return student[1]

所以上述的lambda function 則是直接回傳目前item中的第幾個元素 student[1]=>'A', 'B', 'B'. student[2]=> 15, 12, 10.

More example

>>> d = {'a1': 3, 'a2': 4, 'a3': 3, 'b1': 1, 'b2': 2, 'c1': 2, 'c3': 4}

>>> sorted(d.items(), key=lambda x: x[1])
[('b1', 1), ('c1', 2), ('b2', 2), ('a1', 3), ('a3', 3), ('a2', 4), ('c3', 4)] # ascension

>>> sorted(d.items(), key=lambda x: -x[1])
[('a2', 4), ('c3', 4), ('a1', 3), ('a3', 3), ('c1', 2), ('b2', 2), ('b1', 1)] # descend

>>> sorted(d.items(), key=lambda x: (x[1], x[0]))
[('b1', 1), ('b2', 2), ('c1', 2), ('a1', 3), ('a3', 3), ('a2', 4), ('c3', 4)] # ascension in key & val

>>> sorted(d.items(), key=lambda x: (-x[1], x[0]))
[('a2', 4), ('c3', 4), ('a1', 3), ('a3', 3), ('b2', 2), ('c1', 2), ('b1', 1)] # descend in val, ascension in val