【发布时间】:2016-11-22 10:08:06
【问题描述】:
我有这个:
[
[{ 'position': 1, 'user_id': 2, 'value': 4, 'points': 100}],
[{ 'position': 2, 'user_id': 6, 'value': 3, 'points': 88}],
[{ 'position': 3, 'user_id': 5, 'value': 2, 'points': 77}],
[{ 'position': 4, 'user_id': 7, 'value': 1, 'points': 66}],
[{ 'position': 5, 'user_id': 3, 'value': 1, 'points': 9}],
[{ 'position': 6, 'user_id': 11, 'value': 0, 'points': 9}],
[{ 'position': 7, 'user_id': 1, 'value': 0, 'points': 3}],
[{ 'position': 8, 'user_id': 10, 'value': 0, 'points': 3}],
[{ 'position': 9, 'user_id': 4, 'value': 0, 'points': 2}],
[{ 'position': 10, 'user_id': 8, 'value': 0, 'points': 2}]
]
按点组织。 这个想法是选择 user_id 并生成一个包含所选 5 个用户的新列表。
示例:
user_id=3:
[{ 'position': 3, 'user_id': 5, 'value': 2, 'points': 77}],
[{ 'position': 4, 'user_id': 7, 'value': 1, 'points': 66}],
[{ 'position': 5, 'user_id': 3, 'value': 1, 'points': 9}],
[{ 'position': 6, 'user_id': 11, 'value': 0, 'points': 9}],
[{ 'position': 7, 'user_id': 1, 'value': 0, 'points': 3}]
在中间返回 user_id 3,高 2 个用户,低 2 个用户
user_id=2
[{ 'position': 1, 'user_id': 2, 'value': 4, 'points': 100}],
[{ 'position': 2, 'user_id': 6, 'value': 3, 'points': 88}],
[{ 'position': 3, 'user_id': 5, 'value': 2, 'points': 77}],
[{ 'position': 4, 'user_id': 7, 'value': 1, 'points': 66}],
[{ 'position': 5, 'user_id': 3, 'value': 1, 'points': 9}],
由于 user_id 没有更高的用户,它返回 4 个更低的用户。所以总是相同的逻辑。
user_id=9:
[{ 'position': 6, 'user_id': 11, 'value': 0, 'points': 9}],
[{ 'position': 7, 'user_id': 1, 'value': 0, 'points': 3}],
[{ 'position': 8, 'user_id': 10, 'value': 0, 'points': 3}],
[{ 'position': 9, 'user_id': 4, 'value': 0, 'points': 2}],
[{ 'position': 10, 'user_id': 8, 'value': 0, 'points': 2}]
在 user_id=9 上,我们只有 1 个较低的用户,所以我们添加了 3 个较高的用户
例如,如果我们在列表中只有 2 个用户,它应该返回 2 个用户。 主要规则: 如果我们有 5 个或更多用户,则返回 5 个用户。 如果我们有 4 个用户,则返回 4 个用户
如何做到这一点的好方法? 谢谢
【问题讨论】:
-
这和this one是同一个问题。你只是重新制定了它。
-
是的,我不得不更改一些以前的代码
-
您为什么不编辑您的问题而不是创建一个新问题?
-
思想现在更容易理解了,其他的答案我认为会断章取义
标签: python django sorting populate