<p>第一步是获取所有不同的<code>'Main ID'</code>的<code>set</code>。我们还可以立即<code>sum</code>列出每个人的<code>'Sub IDs'</code>列表,因为我们现在方便地将它们组合在一起</p>
<pre><code>l = [{'Main ID': 0, 'Sub IDs': [0]}, {'Main ID': 0, 'Sub IDs': [3]}, {'Main ID': 2, 'Sub IDs': [3]}]
for key in set(key['Main ID'] for key in l):
print (key, end=': ')
print (sum([value['Sub IDs'] for value in l if value['Main ID'] == key],[]))
</code></pre>
<p/>
<pre><code>0: [0, 3]
2: [3]
</code></pre>
<p>这很好用,你实际上已经完成了!该结果可用作列表的简单列表。但是你想重建字典。原始密钥名称丢失,因此我们再次插入它们,使其再次成为字典</p>
<pre><code>for key in set(key['Main ID'] for key in l):
print ({'Main ID':key, 'Sub IDs':sum([value['Sub IDs'] for value in l if value['Main ID'] == key],[])})
</code></pre>
<p/>
<pre><code>{'Main ID': 0, 'Sub IDs': [0, 3]}
{'Main ID': 2, 'Sub IDs': [3]}
</code></pre>
<p>由于它被集合上的一个简单的<code>for</code>循环所包围,因此我们可以通过将<code>for</code>循环移到已有循环的末尾,将其包装回一个列表中,从而使其成为完整的列表理解:</p>
<pre><code>print ([{'Main ID':key, 'Sub IDs':sum([value['Sub IDs'] for value in l if value['Main ID'] == key],[])} for key in set(key['Main ID'] for key in l)])
</code></pre>
<p>这是哪一行</p>
<pre><code>print (
[
{'Main ID':key,
'Sub IDs':sum(
[
value['Sub IDs'] for value in l if value['Main ID'] == key
], []
)
} for key in
set(
key['Main ID'] for key in l
)
] )
</code></pre>
<p>并且达到了预期的效果</p>
<pre><code>[{'Main ID': 0, 'Sub IDs': [0, 3]}, {'Main ID': 2, 'Sub IDs': [3]}]
</code></pre>