您好,登錄后才能下訂單哦!
本文實例講述了Python通過公共鍵對字典列表排序算法。分享給大家供大家參考,具體如下:
問題:想根據一個或多個字典中的值來對列表排序
解決方案:利用operator模塊中的itemgetter()
函數對這類結構進行排序是非常簡單的。
# Sort a list of a dicts on a common key rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}, {'fname': 'Big', 'lname': 'Jones', 'uid': 1004} ] from operator import itemgetter rows_by_fname = sorted(rows, key=itemgetter('fname')) rows_by_uid = sorted(rows, key=itemgetter('uid')) from pprint import pprint print("Sorted by fname:") pprint(rows_by_fname) #pprint模塊的pprint()提供了打印出任何python數據結構類和方法。 print("Sorted by uid:") pprint(rows_by_uid) rows_by_lfname = sorted(rows, key=itemgetter('lname','fname')) print("Sorted by lname,fname:") pprint(rows_by_lfname)
>>> ================================ RESTART ================================ >>> Sorted by fname: [{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}, {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}] Sorted by uid: [{'fname': 'John', 'lname': 'Cleese', 'uid': 1001}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}] Sorted by lname,fname: [{'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}, {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}, {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}] >>>
補充說明:
有時候會利用lambda表達式來取代itemgetter()
的功能:但是利用itemgetter()
會運行的更快一些,所以考慮性能的話,應該使用itemgetter()
。
rows_by_fname = sorted(rows, key=lambda r:r['fname']) rows_by_uid = sorted(rows, key=lambda r:r['uid'])
最后,本節展示的技術同樣適用于min()
和max()
這樣的函數:
>>> min(rows, key=itemgetter('uid')) {'lname': 'Cleese', 'fname': 'John', 'uid': 1001} >>> max(rows, key=itemgetter('uid')) {'lname': 'Jones', 'fname': 'Big', 'uid': 1004} >>> itemgetter('uid') <operator.itemgetter object at 0x023532F0> >>>
(代碼摘自《Python Cookbook》)
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。