如何检测列表中的下一个任务,具体取决于顺序

詹斯

给定的是具有n个项目的数组。每个项目可以包含n个未排序的任务。样品:

projects = [
    {"name" : "Sampleproject 1", "tasks" : 
        {"order" : 1, "description" : "Do something 1", "status" : "Done"},
        {"order" : 3, "description" : "Do something 3", "status" : "Open"},
        {"order" : 2, "description" : "Do something 2", "status" : "Open"}
    },
    {"name" : "Sampleproject 2", "tasks" : 
        {"order" : 1, "description" : "Do something 1", "status" : "Done"},
        {"order" : 1, "description" : "Do something 3", "status" : "Open"},
        {"order" : 1, "description" : "Do something 2", "status" : "Open"},
        {"order" : 2, "description" : "Do something 4", "status" : "Open"}
    }
]

如果用户可以处理每个任务,则必须为其添加一个活动密钥。

可以并行和顺序处理任务,由订单号表示。这意味着:必须先完成订单号为1的所有任务,然后才能处理订单2的任务,必须先完成订单号为2的所有任务,然后再处理订单3,依此类推...

要求的输出:

projects = [
    {"name" : "Sampleproject 1", "tasks" : 
        {"order" : 1, "description" : "Do something 1", "status" : "Done", "active" : false},
        {"order" : 3, "description" : "Do something 3", "status" : "Open", "active" : false},
        {"order" : 2, "description" : "Do something 2", "status" : "Open", "active" : true}
    },
    {"name" : "Sampleproject 2", "tasks" : 
        {"order" : 1, "description" : "Do something 1", "status" : "Done", "active" : false},
        {"order" : 1, "description" : "Do something 3", "status" : "Open", "active" : true},
        {"order" : 1, "description" : "Do something 2", "status" : "Open", "active" : true},
        {"order" : 2, "description" : "Do something 4", "status" : "Open", "active" : false}
    }
]
公路跑者

这不是最有效的解决方案,但是您可以按任务排序order,然后将Open状态为的最新优先顺序设置active,其余设置为false时间复杂度可能是O(P * TLog(T) + T),可以简化为just O(P * TLog(T)),其中P项目T数是每个项目的任务数。排序是NLog(N),因此多数民众赞成在哪里TLog(T)来。

from operator import itemgetter
from json import dumps

projects = [
    {
        "name": "Sampleproject 1",
        "tasks": [
            {"order": 1, "description": "Do something 1", "status": "Done"},
            {"order": 3, "description": "Do something 3", "status": "Open"},
            {"order": 2, "description": "Do something 2", "status": "Open"},
        ],
    },
    {
        "name": "Sampleproject 2",
        "tasks": [
            {"order": 1, "description": "Do something 1", "status": "Done"},
            {"order": 1, "description": "Do something 3", "status": "Open"},
            {"order": 1, "description": "Do something 2", "status": "Open"},
            {"order": 2, "description": "Do something 4", "status": "Open"},
        ],
    },
]

for project in projects:
    sorted_tasks = sorted(project["tasks"], key=itemgetter("order"))

    priority_order = None
    for task in sorted_tasks:
        if task["status"] == "Open" and (priority_order is None or task["order"] == priority_order):
            task["active"] = True
            priority_order = task["order"]
        else:
            task["active"] = False

print(dumps(projects, indent=4))

输出为JSON(以便于查看结果):

[
    {
        "name": "Sampleproject 1",
        "tasks": [
            {
                "order": 1,
                "description": "Do something 1",
                "status": "Done",
                "active": false
            },
            {
                "order": 3,
                "description": "Do something 3",
                "status": "Open",
                "active": false
            },
            {
                "order": 2,
                "description": "Do something 2",
                "status": "Open",
                "active": true
            }
        ]
    },
    {
        "name": "Sampleproject 2",
        "tasks": [
            {
                "order": 1,
                "description": "Do something 1",
                "status": "Done",
                "active": false
            },
            {
                "order": 1,
                "description": "Do something 3",
                "status": "Open",
                "active": true
            },
            {
                "order": 1,
                "description": "Do something 2",
                "status": "Open",
                "active": true
            },
            {
                "order": 2,
                "description": "Do something 4",
                "status": "Open",
                "active": false
            }
        ]
    }
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在下一个工作日动态渲染,具体取决于当前的“天”

来自分类Dev

jQuery聚焦不同的事件,具体取决于下一个聚焦点

来自分类Dev

改造请求的顺序,下一个请求取决于上一个请求的结果

来自分类Dev

填充空白行取决于上一个/下一个非空值

来自分类Dev

在一个选择下拉列表中禁用选项值,具体取决于在另一个选择列表中选择的值

来自分类Dev

javascript更改剩余的下拉列表值,具体取决于第一个

来自分类Dev

设置一个SASS变量,具体取决于

来自分类Dev

如何在R中按顺序获得下一个数字

来自分类Dev

从文件中删除行,具体取决于在另一个文件中找到的行

来自分类Dev

无法将数据传递给下一个 ViewController 取决于 UIPickerView textField.text?

来自分类Dev

如何获取列表的下一个树元素

来自分类Dev

列表中的下一个元素

来自分类Dev

给班级到列表中的下一个项目

来自分类Dev

jQuery在列表中查找下一个类

来自分类Dev

给班级到列表中的下一个项目

来自分类Dev

在列表中查找下一个缺失的数字

来自分类Dev

Alfresco:如何在下一个任务中查看完成任务的数据?

来自分类Dev

从一个DataFrame中选择行,具体取决于另一个中的值

来自分类Dev

如何通过使用itertools模块获取排序列表中的下一个按字典顺序更大的字符串?

来自分类Dev

如何使用LINQ从通用列表中获取下一个合适的值?

来自分类Dev

如何使用LINQ在列表中查找下一个匹配元素的索引

来自分类Dev

找到关键元素后如何从列表中获取下一个元素

来自分类Dev

如何阻止JWPlayer自动播放播放列表中的下一个视频?

来自分类Dev

删除项目后如何在角度列表中查找下一个空闲ID

来自分类Dev

如何舍入列表中的下一个数字?

来自分类Dev

如何引用列表中的下一个项目并将其与之前的项目进行比较?

来自分类Dev

如何在Here Maps API PlacesResponse中访问结果的下一个列表?

来自分类Dev

如何检索列表中的下一个较高的数字?

来自分类Dev

如何仅将列表中的数字与下一个数字(邻居)进行比较?

Related 相关文章

  1. 1

    在下一个工作日动态渲染,具体取决于当前的“天”

  2. 2

    jQuery聚焦不同的事件,具体取决于下一个聚焦点

  3. 3

    改造请求的顺序,下一个请求取决于上一个请求的结果

  4. 4

    填充空白行取决于上一个/下一个非空值

  5. 5

    在一个选择下拉列表中禁用选项值,具体取决于在另一个选择列表中选择的值

  6. 6

    javascript更改剩余的下拉列表值,具体取决于第一个

  7. 7

    设置一个SASS变量,具体取决于

  8. 8

    如何在R中按顺序获得下一个数字

  9. 9

    从文件中删除行,具体取决于在另一个文件中找到的行

  10. 10

    无法将数据传递给下一个 ViewController 取决于 UIPickerView textField.text?

  11. 11

    如何获取列表的下一个树元素

  12. 12

    列表中的下一个元素

  13. 13

    给班级到列表中的下一个项目

  14. 14

    jQuery在列表中查找下一个类

  15. 15

    给班级到列表中的下一个项目

  16. 16

    在列表中查找下一个缺失的数字

  17. 17

    Alfresco:如何在下一个任务中查看完成任务的数据?

  18. 18

    从一个DataFrame中选择行,具体取决于另一个中的值

  19. 19

    如何通过使用itertools模块获取排序列表中的下一个按字典顺序更大的字符串?

  20. 20

    如何使用LINQ从通用列表中获取下一个合适的值?

  21. 21

    如何使用LINQ在列表中查找下一个匹配元素的索引

  22. 22

    找到关键元素后如何从列表中获取下一个元素

  23. 23

    如何阻止JWPlayer自动播放播放列表中的下一个视频?

  24. 24

    删除项目后如何在角度列表中查找下一个空闲ID

  25. 25

    如何舍入列表中的下一个数字?

  26. 26

    如何引用列表中的下一个项目并将其与之前的项目进行比较?

  27. 27

    如何在Here Maps API PlacesResponse中访问结果的下一个列表?

  28. 28

    如何检索列表中的下一个较高的数字?

  29. 29

    如何仅将列表中的数字与下一个数字(邻居)进行比较?

热门标签

归档