<p>不是最有效的解决方案,但您可以按<code>order</code>对任务进行排序,然后将<code>Open</code>状态的最新优先级顺序设置为<code>active</code>,其余的设置为<code>false</code>。时间复杂度可能是<code>O(P * TLog(T) + T)</code>,可以简化为<code>O(P * TLog(T))</code>,其中<code>P</code>是项目数,<code>T</code>是每个项目的任务数。排序是<code>NLog(N)</code>,因此<code>TLog(T)</code>来自于此</p>
<pre><code>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))
</code></pre>
<p>输出为JSON(便于查看结果):</p>
<pre><code>[
{
"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
}
]
}
]
</code></pre>