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

 更新时间:2018年03月15日 11:39:26   作者:垄上行  
这篇文章主要介绍了Python cookbook(数据结构与算法)通过公共键对字典列表排序算法,结合实例形式分析了Python基于operator模块中的itemgetter()函数对字典进行排序的相关操作技巧,需要的朋友可以参考下

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python发送邮件的几种方式(最全总结!)

    Python发送邮件的几种方式(最全总结!)

    发送电子邮件是个很常见的开发需求,平时如果有什么重要的信息怕错过,就可以发个邮件到邮箱来提醒自己,这篇文章主要给大家介绍了关于Python发送邮件的几种方式,需要的朋友可以参考下
    2024-03-03
  • python得到windows自启动列表的方法

    python得到windows自启动列表的方法

    今天小编就为大家分享一篇python得到windows自启动列表的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python项目下生成requirements.txt方法

    python项目下生成requirements.txt方法

    这篇文章主要介绍了python项目下生成requirements.txt的方法,很多小伙伴不知道如何生成requirements.txt,本文就通过代码示例给大家详细介绍如何生成,,需要的朋友可以参考下
    2023-06-06
  • 将Pytorch模型从CPU转换成GPU的实现方法

    将Pytorch模型从CPU转换成GPU的实现方法

    今天小编就为大家分享一篇将Pytorch模型从CPU转换成GPU的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python将邻接矩阵输出成图的实现

    python将邻接矩阵输出成图的实现

    今天小编就为大家分享一篇python将邻接矩阵输出成图的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python实现经纬度采样的示例代码

    python实现经纬度采样的示例代码

    这篇文章主要介绍了python实现经纬度采样的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python selenium 八种定位元素的方式

    Python selenium 八种定位元素的方式

    这篇文章主要介绍了Python selenium八种定位元素的方式,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python深度学习pytorch神经网络汇聚层理解

    Python深度学习pytorch神经网络汇聚层理解

    通常当我们处理图像时,我们希望逐渐降低隐藏表示的空间分辨率,聚集信息,这样随着我们在神经网络层叠的上升,每个神经元对其敏感的感受野(输入)就越大
    2021-10-10
  • Python3 socket即时通讯脚本实现代码实例(threading多线程)

    Python3 socket即时通讯脚本实现代码实例(threading多线程)

    这篇文章主要介绍了Python3 socket即时通讯脚本实现代码实例(threading多线程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python中Lambda表达式详解

    python中Lambda表达式详解

    在本篇文章里小编给大家整理的是关于python中Lambda表达式的相关知识点内容,有需要的朋友们可以学习下。
    2019-11-11

最新评论