Python3 对 dict list 进行排序
Python3 中的排序,在 Sorting HOW TO 中已经讲得很清楚了。来个实际的例子,对下面的这个 list 依据创建时间排序:
1pages = [
2{'title': '十年学会程序设计', 'time': '2012-02-14', 'name': '21-days'},
3{'title': 'ANE Toolkit', 'time': '2012-06-07', 'name': 'anetoolkit'},
4{'title': 'cocos2d-x-filters', 'time': '2015-05-06', 'name': 'cocos2d-x-filters'},
5{'title': '我的Firefox插件', 'time': '2006-05-23', 'name': 'firefox-addons'},
6{'title': 'Flash&Flex大全', 'time': '2005-11-02', 'name': 'flashassistant'},
7{'title': '提问的智慧', 'time': '2005-10-08', 'name': 'howtoask'},
8{'title': 'Linux软件', 'time': '2009-04-30', 'name': 'linux-software'},
9{'title': 'Platform ANEs', 'time': '2013-08-22', 'name': 'platform-anes'},
10{'title': '阅读', 'time': '2015-03-03', 'name': 'read'},
11{'title': 'Sprite Sheet Editor', 'time': '2011-08-18', 'name': 'sprite_sheet_editor'},
12{'title': 'SpriteSheetPacker', 'time': '2011-04-19', 'name': 'spritesheetpacker'},
13{'title': 'WordPress大全', 'time': '2006-03-07', 'name': 'wordpressfavorite'},
14{'title': 'WPCMD', 'time': '2015-06-12', 'name': 'wpcmd'}
15]
首先,排序需要一个可以比较的对象,我使用键名为 index
中的对象:
1from datetime import date
2
3for item in pages:
4 t = item['time'].split('-')
5 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
方法:
1pages.sort(key=lambda item : item['index'])
在这里,我需要为 key 传递一个函数,这个函数能返回需要比较的值。
当然,也可以使用 operator
提供的 itemgetter
方法来获取这个待比较的值。
1from operator import itemgetter
2names.sort(key=itemgetter('index'))
除了 itemgetter 之外, operator 模块还提供了 attrgetter 和 methodcaller 。
张贺 对上面提到的 Sorting Mini-HOW TO 做了一些必要的中文评注,该文和 Sorting HOW TO 基本相同。
如果想要再了解一点,可以看这篇 通过某个关键字排序一个字典列表 和 排序不支持原生比较的对象 。
当然,你最好先把 Sorting HOW TO 看完。
(全文完)
- 文章ID:2329
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/sort-dict-list-in-python3/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。