Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
本文实例讲述了Python通过公共键对字典列表排序算法。分享给大家供大家参考,具体如下:
问题:想根据一个或多个字典中的值来对列表排序
解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的。
#Sortalistofadictsonacommonkey
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}
]
fromoperatorimportitemgetter
rows_by_fname=sorted(rows,key=itemgetter('fname'))
rows_by_uid=sorted(rows,key=itemgetter('uid'))
frompprintimportpprint
print("Sortedbyfname:")
pprint(rows_by_fname)#pprint模块的pprint()提供了打印出任何python数据结构类和方法。
print("Sortedbyuid:")
pprint(rows_by_uid)
rows_by_lfname=sorted(rows,key=itemgetter('lname','fname'))
print("Sortedbylname,fname:")
pprint(rows_by_lfname)
>>>================================RESTART================================
>>>
Sortedbyfname:
[{'fname':'Big','lname':'Jones','uid':1004},
{'fname':'Brian','lname':'Jones','uid':1003},
{'fname':'David','lname':'Beazley','uid':1002},
{'fname':'John','lname':'Cleese','uid':1001}]
Sortedbyuid:
[{'fname':'John','lname':'Cleese','uid':1001},
{'fname':'David','lname':'Beazley','uid':1002},
{'fname':'Brian','lname':'Jones','uid':1003},
{'fname':'Big','lname':'Jones','uid':1004}]
Sortedbylname,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=lambdar:r['fname']) rows_by_uid=sorted(rows,key=lambdar: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')
>>>
(代码摘自《PythonCookbook》)
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。