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=Trueinsorted

于 2013-07-28T19:09:39.383 回答
1

Jinja2 本身的内置过滤器无法做到这一点。您要么必须在视图函数中对其进行排序,要么进行自定义过滤器

另请注意,dict永远不能保证 a 是有序的;看看collections.OrderedDict吧。或者更好的是,将其列在mensi建议的列表中。

于 2013-07-29T02:55:42.690 回答