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

本文实例讲述了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数据结构" title="python数据结构">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程序设计有所帮助。

以上是 Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例 的全部内容, 来源链接: utcz.com/z/344636.html

回到顶部