「学习一个」的归档方法


📍 2022-04-03 🏷️ #数据结构 #博客

问题

一个分类下的若干篇文档,已有规范的文件命名 %Y-%m-%d-title,归档须降序排列并根据年份分组。

解决方法

如 Category keyboard-photography 有如下内容:

posts = [
    {'category': '键盘摄影', 'date': '2016-09-09', 'slug': 'go-to-the-uk-next-week', 'tags': ['陈绮贞'], 'title': '下个星期去英国', 'year': '2016', 'file': '2016-09-09-go-to-the-uk-next-week.md'},
    {'category': '键盘摄影', 'date': '2021-07-23', 'slug': 'archery-on-horseback', 'tags': ['旅游', '采访'], 'title': '骑射', 'year': '2021', 'file': '2021-07-23-archery-on-horseback.md'},
    {'category': '键盘摄影', 'date': '2018-02-11', 'slug': 'nioh', 'tags': ['仁王', 'PS4'], 'title': '氢氧化镍完结撒花', 'year': '2018', 'file': '2018-02-11-nioh.md'},
    {'category': '键盘摄影', 'date': '2020-11-07', 'slug': 'buy-vegetables', 'tags': ['Leica', '人', '扫街'], 'title': '买菜', 'year': '2020', 'file': '2020-11-07-buy-vegetables.md'},
    {'category': '键盘摄影', 'date': '2018-04-14', 'slug': 'an-uninhabited-island-without-friday', 'tags': ['猫', 'Cookie'], 'title': '没有星期五的无人岛', 'year': '2018', 'file': '2018-04-14-an-uninhabited-island-without-friday.md'}
]

先按照时间(文件名)降序排列:

from operator import itemgetter
posts.sort(key=itemgetter('file'), reverse=True)

再根据年份分组:

from itertools import groupby
for year, group in groupby(posts, key=itemgetter('year')):
    for post in group:
        # Do something with current year and every post in this group.
        pass

上述方法分别用到了 operator.itemgetter()itertools.groupby() 函数。

实现