擅长:python、mysql、java
<p>我认为,如果我们首先使用一个正确的表达式来研究大致等效的<code>for</code>循环,将有助于更好地理解错误:</p>
<pre><code>for item in multipleDict.items():
k, v = item
...
</code></pre>
<p>这里,字典的<code>items</code>方法返回形式(键、值)的2元素元组的迭代器,并且在<code>for</code>循环的每次迭代中,变量<code>item</code>只包含这些2元素元组中的一个。然后可以在解包赋值中将其解包为多个变量(在本例中为2个变量),解包赋值需要迭代元组的元素</p>
<p>还可以省略<code>item</code>变量,只需编写:</p>
<pre><code>for k, v in multipleDict.items():
....
</code></pre>
<p>这更接近于你在字典理解中使用的</p>
<p>现在来看看出错的版本或与之相当的<code>for</code>循环。我将继续使用<code>item</code>变量编写它,尽管它同样不需要它</p>
<pre><code>for item in mutipleDict:
k, v = item
...
</code></pre>
<p>当您迭代字典时,您迭代键,因此这也相当于:</p>
<pre><code>for item in mutipleDict.keys():
k, v = item
...
</code></pre>
<p>在本例中,字典的键在这里仅为整数1、5、7和9999(不一定按该顺序排列)。因此,在第一次迭代中,<code>item</code>将包含这些整数中的一个,它正试图将其解压为多个变量。但是你不能迭代一个整数,这就是为什么你会看到错误</p>
<p>回到最初的词典理解,更正的版本只是:</p>
<pre><code>multipleDict = {v:k for k, v in multipleDict.items()}
</code></pre>