转载

Python3 对 dict list 进行排序

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用 文章源码 进行转载;
  • 本文标题:Python3 对 dict list 进行排序
  • 本文链接: http://zengrong.net/post/2329.htm

Python3 中的排序,在 Sorting HOW TO 中已经讲得很清楚了。来个实际的例子,对下面的这个 list 依据创建时间排序:

pages = [ {'title': '十年学会程序设计', 'time': '2012-02-14', 'name': '21-days'},  {'title': 'ANE Toolkit', 'time': '2012-06-07', 'name': 'anetoolkit'},  {'title': 'cocos2d-x-filters', 'time': '2015-05-06', 'name': 'cocos2d-x-filters'},  {'title': '我的Firefox插件', 'time': '2006-05-23', 'name': 'firefox-addons'},  {'title': 'Flash&Flex大全', 'time': '2005-11-02', 'name': 'flashassistant'},  {'title': '提问的智慧', 'time': '2005-10-08', 'name': 'howtoask'},  {'title': 'Linux软件', 'time': '2009-04-30', 'name': 'linux-software'},  {'title': 'Platform ANEs', 'time': '2013-08-22', 'name': 'platform-anes'},  {'title': '阅读', 'time': '2015-03-03', 'name': 'read'},  {'title': 'Sprite Sheet Editor', 'time': '2011-08-18', 'name': 'sprite_sheet_editor'},  {'title': 'SpriteSheetPacker', 'time': '2011-04-19', 'name': 'spritesheetpacker'},  {'title': 'WordPress大全', 'time': '2006-03-07', 'name': 'wordpressfavorite'},  {'title': 'WPCMD', 'time': '2015-06-12', 'name': 'wpcmd'} ]

首先,排序需要一个可以比较的对象,我使用键名为 index 中的对象:

from datetime import date  for item in pages:     t = item['time'].split('-')     item['index'] = date(int(t[0]), int(t[1]), int(t[2]))

date 的实例是可比较的(它实现了 __lt__ 那一套方法), date(2012,2,14) < data(2005, 11, 2) == False

然后,对 pages 调用 sort 方法:

pages.sort(key=lambda item : item['index'])

在这里,我需要为 key 传递一个函数,这个函数能返回需要比较的值。

当然,也可以使用 operator 提供的 itemgetter 方法来获取这个待比较的值。

from operator import itemgetter names.sort(key=itemgetter('index'))

除了 itemgetter 之外, operator 模块还提供了 attrgetter 和 methodcaller 。

张贺 对上面提到的 Sorting Mini-HOW TO 做了一些必要的中文评注,该文和 Sorting HOW TO 基本相同。

如果想要再了解一点,可以看这篇 通过某个关键字排序一个字典列表 和 排序不支持原生比较的对象 。

当然,你最好先把 Sorting HOW TO 看完。

(全文完)

正文到此结束
Loading...