您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例

5b51 2022/1/14 8:15:06 python 字数 4386 阅读 318 来源 www.jb51.cc/python

本文实例讲述了Python通过公共键对字典列表排序算法。分享给大家供大家参考,具体如下:

概述

本文实例讲述了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','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','uid': 1004},{'fname': 'Brian','uid': 1001}]
Sorted by uid:
[{'fname': 'John','uid': 1004}]
Sorted by lname,fname:
[{'fname': 'David','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程序设计有所帮助。

总结

以上是编程之家为你收集整理的Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例全部内容,希望文章能够帮你解决Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶