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

作者:垄上行 时间:2021-07-23 01:24:36 

本文实例讲述了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程序设计有所帮助。

来源:http://www.cnblogs.com/apple2016/p/5747116.html

标签:Python,数据结构与算法,字典
0
投稿

猜你喜欢

  • 用CSS实现图片等比例缩放

    2008-01-18 21:10:00
  • Linux服务器上安装Python3的两种方式

    2022-01-23 12:13:39
  • python DataFrame中loc与iloc取数据的基本方法实例

    2022-06-23 15:58:25
  • Python利用PyQT5设置闹钟功能

    2023-05-08 15:34:08
  • python 合并表格详解

    2023-09-08 16:03:48
  • 讲解如何利用 Python完成 Saga 分布式事务

    2021-08-19 00:03:48
  • Python语言描述机器学习之Logistic回归算法

    2023-08-31 01:14:35
  • Python实现检测服务器是否可以ping通的2种方法

    2023-06-07 20:18:14
  • Django csrf校验的实现

    2023-10-01 14:49:40
  • python二分法实现实例

    2023-02-16 05:09:46
  • Python在cmd上打印彩色文字实现过程详解

    2022-12-19 07:27:33
  • Python实现井字棋小游戏

    2023-04-27 05:29:07
  • 使用Python编写爬虫的基本模块及框架使用指南

    2021-08-21 17:45:19
  • Python调用百度OCR实现图片文字识别的示例代码

    2021-04-07 14:21:50
  • Python探索之pLSA实现代码

    2022-01-03 11:30:28
  • 10个有用的Python字符串函数小结

    2023-08-13 11:26:28
  • Python 装饰器代码解析

    2022-06-29 20:48:01
  • python迭代dict的key和value的方法

    2021-11-03 16:04:17
  • Pandas中DataFrame交换列顺序的方法实现

    2023-01-21 10:21:08
  • 七种Python代码审查工具推荐

    2021-06-16 07:07:34
  • asp之家 网络编程 m.aspxhome.com