擅长:python、mysql、java
<p>这是实现算法的一种方法:</p>
<pre><code>res = []
for d in data:
res.append({**{'id': d['id'], **{'close_approch_data': \
next((iter(sorted((e for e in d['close_approach_data'] \
if e['orbiting_body'] != 'Earth'), \
key=lambda x: x['approach_date']))), None)}}})
print(res)
[{'close_approch_data': {'approach_date': '1935-06-07',
'orbiting_body': 'Mars'},
'id': '01'},
{'close_approch_data': {'approach_date': '1935-06-07',
'orbiting_body': 'Mars'},
'id': '02'}]
</code></pre>
<p><strong>解释</strong></p>
<p>乍一看(第二眼),这看起来是一团糟。但关键部分是:</p>
<ul>
<li>重复你的字典列表。你知道吗</li>
<li>对于每个<code>id</code>,在列表<code>res</code>中添加一个项。你知道吗</li>
<li>仅在生成器表达式中通过<code>if</code>子句包含非来自地球的数据。你知道吗</li>
<li>按进场日期排序;您可以继续使用<code>datetime</code>,但鉴于当前格式,这不是必需的。你知道吗</li>
<li>如果第一个元素通过<code>next(iter(...))</code>存在,则提取它。如果不存在元素,则返回<code>{'close_approach_data': None}</code>。你知道吗</li>
</ul>