给定的是具有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] 删除。
我来说两句