有一個清單如下,每一個元素都是字典,這些字典都有一個公共鍵,現在要根據這些公共鍵對這個清單進行排序,怎麼辦?
rows = [
{'fname': 'Brain', 'uid': 1003},
{'fname': 'David', 'uid': 1002},
{'fname': 'John', 'uid': 1001},
{'fname': 'Big', 'uid': 1004}]
如果是硬上,做法應該是周遊其中的每一個元素,然後根據每個字典的公共鍵的值的大小重新寫入一個清單,最終得到的結果就是排序之後的結果。
這裡推薦一個 Python 的一個子產品可以免去我們自己寫函數的操作,那就是:
from operator import itemgetter
sorted(rows, key=itemgetter('fname'))
Out[18]:
[{'fname': 'Big', 'uid': 1004},
{'fname': 'Brain', 'uid': 1003},
{'fname': 'David', 'uid': 1002},
{'fname': 'John', 'uid': 1001}]
#注意,sorted 之後會傳回一個新的字典清單,而不是直接在原清單進行修改
rows
Out[19]:
[{'fname': 'Brain', 'uid': 1003},
{'fname': 'David', 'uid': 1002},
{'fname': 'John', 'uid': 1001},
{'fname': 'Big', 'uid': 1004}]
#這個操作其實等同于 lambda 的如下用法:
sorted(rows, key=lambda x: x['fname'])
如果要考慮輸入多個參數:
sorted(rows, key=itemgetter('fname', 'uud'))
等同于
sorted(rows, key=lambda x: (x['fname'], x['uid']))
兩種方法都可以,但是如果考慮到性能問題,應該使用 itemgetter。