1

次のように、ユーザーごとの評価、肯定的な点、否定的な点の辞書を渡すフラスコ エンドポイント関数があります。

leaderDict = {
    'users': {
        '<user1>': {
            'rating': 80.0,
            'positive': 32,
            'negative': 8
        },
        '<user2>': { ... }
    },
    'groups': { ... }
}
return render_template('leaderboard.html', **{"leaderDict": leaderDict})

私ができるようにしたいのは、Jinja で、ユーザーからリーダーボードを作成することです。つまり、ユーザーを降順で並べ替えますrating。可能であれば、上記のデータ構造をフラスコ側で再作成することを避け、すべての解析を Jinja で行いたいと考えています。これを行う最善の方法は何ですか?

4

2 に答える 2

2

user: {stats...}ユーザーが追加キーとして表示されるように、辞書をフラット化することをお勧めします。リスト内包表記でこれを行うことができます:

[dict([('user', k)] + list(v.items())) for k, v in a['users'].items()]

これにより、次のようなエントリのリストが表示されます

{'user': '<user1>', 'negative': 8, 'positive': 32, 'rating': 80.0}

並べ替えるために追加sortedします。

sorted([dict([('user', k)] + list(v.items())) for k, v in a['users'].items()], key=lambda x: x['rating'])

で並べ替えられたリストを反復処理するだけfor ... inです。逆に並べ替えるには、で使用reverse=Trueしますsorted

于 2013-07-28T19:09:39.383 に答える