3

我有一组新闻文章对象,我希望按不同的月份显示这些对象。我曾经itertools.groupby创建过以这种方式排序的 Python 对象列表:

news_grouped = [
    {'date': key, 'list': list(val)}
    for key, val in groupby(obj_list, 
                            (lambda v: datetime.datetime(v.pub_date.year, 
                                                         v.pub_date.month, 1)))
]

所以我最终得到了一个像这样的集合:

[{'date': datetime.datetime(2011, 1, 1, 0, 0), 
  'list': [<News: A January Article>, <News: Another January Article>]}, 
 {'date': datetime.datetime(2010, 12, 1, 0, 0), 
  'list': [<News: Happy Xmas>]}, 
 {'date': datetime.datetime(2010, 10, 1, 0, 0), 
  'list': [<News: Halloween>]}, 
 {'date': datetime.datetime(2010, 1, 1, 0, 0), 
  'list': [<News: Old old old Jan 2010>]}]

我想填充 news_grouped 集合,以便它在最旧的文章和今天的日期之间包含每个月的条目,空的只有一个空列表。

我意识到我可以通过从最旧的日期迭代到最新的日期并填充集合来做到这一点,但是关于这方面的一些事情并不完全适合我,我想它也不是很有效。

有没有更优雅的方法来解决这个问题?谁能指点我一个?

(我实际上正在使用 Django 并且正在使用重组,但似乎我最好在模板之外的 python 中解决这个问题——我当然可能是错的)

非常感谢。

卢多。

4

1 回答 1

0

正如 Space_C0wb0y 所建议的那样,如果你喜欢使用一个有序的字典,它是自 2.7 以来集合模块的一部分。

  1. 获取最旧的文章
  2. 通过以月为单位从最旧的.pub_date 循环到今天来创建映射到空列表的字典键
  3. 遍历所有项目并附加到字典中的适当列表
于 2011-03-01T12:45:33.613 回答