擅长:python、mysql、java
<h3>简单</h3>
<p>从您发布的数据中,您可以比较整个dict,因此只需在<code>current</code>中查找不在<code>prev</code>中的dict:</p>
<pre><code>new = [d for d in current if d not in prev]
print(new) # -> [{'id': 3, 'name': 'e'}, {'id': 4, 'name': 'f'}]
</code></pre>
<h3>复合物</h3>
<p>如果您的真实数据可能有不同的<code>id</code>,那么解决方案需要变得更复杂。你知道吗</p>
<p>因为只有<code>name</code>是重要的,所以创建一组公共名称。然后您可以在dict上循环并检查<code>name</code>是否在公共集合中。你知道吗</p>
<pre><code>prev = [{'id': 0, 'name': 'a'}, {'id': 1, 'name': 'b'}, {'id': 2, 'name': 'c'}]
current = [{'id': 1, 'name': 'b'}, {'id': 2, 'name': 'c'}, {'id': 3, 'name': 'e'}, {'id': 4, 'name': 'f'}]
prev_names, current_names = [{d['name'] for d in x} for x in (prev, current)] # [{'c', 'b', 'a'}, {'c', 'b', 'f', 'e'}]
common_names = prev_names & current_names # {'b', 'c'}
new = [d for d in current if d['name'] not in common_names]
print(new) # -> [{'id': 3, 'name': 'e'}, {'id': 4, 'name': 'f'}]
</code></pre>
<p>在<code>prev</code>中获取不常见的名称也很容易:</p>
<pre><code>old = [d for d in prev if d['name'] not in common_names]
print(old) # -> [{'id': 0, 'name': 'a'}]
</code></pre>