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 を使用しており、regroup を使用していましたが、テンプレートの外側で Python でこれを解決したほうがよいようです - もちろん間違っている可能性があります)

どうもありがとう。

ルード。

4

1 に答える 1

0

Space_C0wb0y で提案されているように、2.7 以降のコレクション モジュールの一部である順序付き辞書を使用する場合は、辞書を使用してください。

  1. 最も古い記事を取得する
  2. old.pub_date から今日まで月単位でループして、空のリストにマッピングする dict キーを作成します。
  3. すべてのアイテムをループし、辞書の適切なリストに追加します
于 2011-03-01T12:45:33.613 に答える