<blockquote>
<p>How can I solve this problem without del function using UNPACKING ARGUMENT?</p>
</blockquote>
<p>是的,你可以。但你不应该。理想的方法应该是:</p>
<pre><code>d1.update(d2) # values will be updated in d1 dict
del d1['country']
</code></pre>
<p>无法直接满足您的条件:</p>
<ul>
<li>使用<em>参数解包</em>创建新的<code>dict</code></li>
<li>不使用<code>del</code>删除国家。你知道吗</li>
</ul>
<p>但如果这是你想要的,还有很多工作要做。例如,将<code>itertools.chain()</code>与<em>dict comprehension</em>一起用作:</p>
<pre><code>{**{k:v for k, v in chain(d1.items(), d2.items()) if k != 'country'}}
</code></pre>
<p><em>注意:</em>对于那些关于<code>{**dict1, **dict2}</code>如何工作的古玩。它是从python3.5+开始支持的新语法,在<a href="https://www.python.org/dev/peps/pep-0448/" rel="nofollow noreferrer">PEP 448</a>中提出。检查:<a href="https://docs.python.org/dev/whatsnew/3.5.html#pep-448-additional-unpacking-generalizations" rel="nofollow noreferrer">What's New in Python 3.5</a>文档。你知道吗</p>
<p>由于只有python3.5+</strong>支持<strong><code>{**dict1, **dict2}</code>,因此对于早期版本的Python,您可以执行以下操作(如S.<a href="https://stackoverflow.com/a/39875454/2063361">De Melo</a>所述):</p>
<pre><code>d = dict(d1, **d2)
d.pop("country")
</code></pre>
<p>或者不使用<code>**</code>作为:</p>
<pre><code>{k, v for k, v in chain(d1.iteritems(), d2.iteritems()) if k != 'country'}
</code></pre>