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,数据结构与算法,字典
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
用CSS实现图片等比例缩放
2008-01-18 21:10:00
Linux服务器上安装Python3的两种方式
2022-01-23 12:13:39
![](https://img.aspxhome.com/file/2023/1/115371_0s.png)
python DataFrame中loc与iloc取数据的基本方法实例
2022-06-23 15:58:25
![](https://img.aspxhome.com/file/2023/8/67868_0s.png)
Python利用PyQT5设置闹钟功能
2023-05-08 15:34:08
![](https://img.aspxhome.com/file/2023/1/110191_0s.png)
python 合并表格详解
2023-09-08 16:03:48
讲解如何利用 Python完成 Saga 分布式事务
2021-08-19 00:03:48
![](https://img.aspxhome.com/file/2023/3/117883_0s.jpg)
Python语言描述机器学习之Logistic回归算法
2023-08-31 01:14:35
![](https://img.aspxhome.com/file/2023/9/75129_0s.jpg)
Python实现检测服务器是否可以ping通的2种方法
2023-06-07 20:18:14
![](https://img.aspxhome.com/file/2023/0/88920_0s.jpg)
Django csrf校验的实现
2023-10-01 14:49:40
![](https://img.aspxhome.com/file/2023/9/72929_0s.png)
python二分法实现实例
2023-02-16 05:09:46
Python在cmd上打印彩色文字实现过程详解
2022-12-19 07:27:33
![](https://img.aspxhome.com/file/2023/8/90378_0s.png)
Python实现井字棋小游戏
2023-04-27 05:29:07
![](https://img.aspxhome.com/file/2023/0/76700_0s.jpg)
使用Python编写爬虫的基本模块及框架使用指南
2021-08-21 17:45:19
Python调用百度OCR实现图片文字识别的示例代码
2021-04-07 14:21:50
![](https://img.aspxhome.com/file/2023/2/90502_0s.jpg)
Python探索之pLSA实现代码
2022-01-03 11:30:28
10个有用的Python字符串函数小结
2023-08-13 11:26:28
Python 装饰器代码解析
2022-06-29 20:48:01
![](https://img.aspxhome.com/file/2023/4/79764_0s.png)
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