python - 要添加到新列表 Python/Django 中的特定元素排序

标签 python django sorting populate

我有这个:

[
[{ '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 个用户

有什么好的方法吗? 谢谢

最佳答案

这基本上只是 my answer 的更新至 your original question .

a = [
    [{ '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}]
]

# Sort it if not already sorted
# a.sort(key=lambda x: x[0]['position'])

def find_index(l, user_id):
    i = 0
    while l[i][0]['user_id'] != user_id:
        i += 1
    return i

def get_subset(l, i):
    return l[:(i + 1 + max(2, 4 - i))][-5:]

get_subset(a, find_index(a, 3))

关于python - 要添加到新列表 Python/Django 中的特定元素排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38459780/

相关文章:

python - 字符串到小的固定长度字符串的廉价映射

Python 类,如何明智地使用它们,以及单一职责原则

python - Django cache_page 检查

jquery - Django/Jquery UI 对话框 - 如何将 Django 与 JqueryUI 对话框集成?

无法按字母顺序对结构数组进行排序

C编程: Sorting Structures with two parameters

python - 查询多个 SQLAlchemy 多对多关系

python - GCP ML 引擎预测失败 : Error processing input: Expected float32 got base64

python - Django动态添加字段而不创建新的模型实例

javascript - 遍历数组以找到具有匹配 ID 的所有对象,并将这些对象合并到数组中的一个元素中。