<p>一种选择是使用<code>heap</code>来跟踪最低顺序。在每个heappop上,您将迭代所有任务,只需检查订单是否是要服务的订单,以及订单是否打开。这看起来像这样:</p>
<pre><code>In [25]: from heapq import heappush, heappop
In [26]: heap = []
In [27]: order_tracking = set()
In [28]: for project in projects:
...: for task in project['tasks']:
...: order_num = task['order']
...: if order_num not in order_tracking:
...: heappush(heap, order_num)
...: order_tracking.add(order_num)
...:
...:
In [29]: heap
Out[29]: [1, 3, 2]
</code></pre>
<p>这将建立订单号的最小堆。现在我们只需要为每一个提供服务:</p>
<pre><code>In [31]: next_to_service = heappop(heap)
In [32]: for project in projects:
...: for task in project['tasks']:
...: order_num = task['order']
...: # If the order number matches
...: if order_num == next_to_service:
...: if task['status'] == 'Open':
...: task['active'] = 'true'
...: else:
...: task['active'] = 'false'
...: # Otherwise we can set it False
...: else:
...: task['active'] = 'false'
...:
</code></pre>
<p>现在您将看到<code>projects</code>的样子:</p>
<pre><code>In [36]: pprint.pprint(projects)
[{'name': 'Sampleproject 1',
'tasks': [{'active': 'false',
'description': 'Do something 1',
'order': 1,
'status': 'Done'},
{'active': 'false',
'description': 'Do something 3',
'order': 3,
'status': 'Open'},
{'active': 'false',
'description': 'Do something 2',
'order': 2,
'status': 'Open'}]},
{'name': 'Sampleproject 2',
'tasks': [{'active': 'false',
'description': 'Do something 1',
'order': 1,
'status': 'Done'},
{'active': 'true',
'description': 'Do something 3',
'order': 1,
'status': 'Open'},
{'active': 'true',
'description': 'Do something 2',
'order': 1,
'status': 'Open'},
{'active': 'false',
'description': 'Do something 4',
'order': 2,
'status': 'Open'}]}]
</code></pre>
<p>然后因为它是一堆:</p>
<pre><code>In [37]: heap
Out[37]: [2, 3]
</code></pre>
<p>你有下一个服务在开始时再次。您可以重复相同的<code>heappop</code>过程,直到堆为空并且所有订单都得到了服务</p>