<p>您采取的方法取决于顶级键(例如<code>0000</code>)是否对单个对象唯一。如果是,您可以使用这些键来过滤返回的对象,如果不是,您需要做更多的工作</p>
<h3>顶级密钥是ID</h3>
<p>如果顶级键对于对象是唯一的,您可以简单地迭代新字典,看看它的键是否在现有字典中。在下面的代码中<code>first</code>是初始字典,<code>second</code>是我们的第二个响应。输出存储在字典<code>third</code>中</p>
<pre class="lang-py prettyprint-override"><code>
third = {} # empty dictionary for our output.
for key, data in second.items():
if key not in first: # is new
third[key] = data
</code></pre>
<p>因此,我们迭代<code>second</code>字典,检查每个键是否在<code>first</code>字典中。如果它<em>不是</em>,我们将它添加到<code>third</code></p>
<p>您也可以使用字典理解来完成此操作(相同的结果)</p>
<pre class="lang-py prettyprint-override"><code>third = {key:value for key, value in second.items() if key not in first}
</code></pre>
<h3>id在数据中</h3>
<p>如果键不是ID,那么您就有一个问题:您需要通过嵌套在第一个字典数据中的内容来过滤第二个字典。我们可以为<code>second</code>中的每个条目迭代<code>first</code>字典,但这很慢</p>
<p>因为我们只想知道<em>它是否在那里,所以我们可以将需要检查的值(例如<code>id</code>)提取到一个新变量中。因为查找速度很快,所以设置一个集合是很好的</p>
<pre class="lang-py prettyprint-override"><code># build a set of values from the first dictionary.
first_ids = set(o['id'] for o in first.values())
third = {}
for key, data in second.items():
if data['id'] not in first_ids:
third[key] = data
</code></pre>
<p>或者,再一次用听写理解</p>
<pre class="lang-py prettyprint-override"><code>first_ids = set(o['id'] for o in first.values())
third = {key:value for key, value in second.items() if value['id'] not in first_ids}
</code></pre>
<p>如您所见,我们在<code>first</code>字典上迭代一次以构建我们的ID集。然后可以使用它快速测试<code>second</code>字典中接收的新数据是否为新数据。如果是,我们将其添加到字典<code>third</code></p>