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单向链表实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 5种Python统计次数方法技巧

    5种Python统计次数方法技巧

    这篇文章主要给大家分享的是5种Python统计次数方法技巧,文章主要包括字典 dict 统计、collections.defaultdict 统计、List count方法、集合(set)和列表(list)统计、collections.Counter方法,感兴趣的小伙伴一起进入下面文章内容吧
    2021-11-11
  • python全栈要学什么 python全栈学习路线

    python全栈要学什么 python全栈学习路线

    在本文中小编给大家整理了关于python全栈要学什么以及python全栈学习路线的知识点内容,需要的朋友们参考下。
    2019-06-06
  • python使用自定义user-agent抓取网页的方法

    python使用自定义user-agent抓取网页的方法

    这篇文章主要介绍了python使用自定义user-agent抓取网页的方法,涉及Python使用urllib2模块操作网页的技巧,需要的朋友可以参考下
    2015-04-04
  • python 列表递归求和、计数、求最大元素的实例

    python 列表递归求和、计数、求最大元素的实例

    今天小编就为大家分享一篇python 列表递归求和、计数、求最大元素的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python中非常实用的Math模块函数教程详解

    Python中非常实用的Math模块函数教程详解

    Math模块中,有很多基础的数学知识,我们必须要掌握的,例如:指数、对数、三角或幂函数等。因此,特意借着这篇文章,为大家讲解一些该库
    2021-10-10
  • Python ldap实现登录实例代码

    Python ldap实现登录实例代码

    今天给大家分享python idap实现登录的实例代码,代码简单易懂,需要的朋友一起看看吧
    2016-09-09
  • Python-ElasticSearch搜索查询的讲解

    Python-ElasticSearch搜索查询的讲解

    今天小编就为大家分享一篇关于Python-ElasticSearch搜索查询的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 解决python flask中config配置管理的问题

    解决python flask中config配置管理的问题

    今天小编就为大家分享一篇解决python flask中config配置管理的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python深度学习tensorflow卷积层示例教程

    python深度学习tensorflow卷积层示例教程

    这篇文章主要为大家介绍了python深度学习tensorflow卷积层示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论