<p>在Python2中,词典中有<code>.items()</code>和<code>.iteritems()</code>。<code>dict.items()</code>返回字典中元组的列表<code>[(k1,v1),(k2,v2),...]</code>。它复制了字典中的所有元组并创建了新的列表。如果字典很大,就会对内存产生很大的影响。</p>
<p>所以他们在后来的Python2版本中创建了<code>dict.iteritems()</code>。这返回了迭代器对象。整个词典没有被复制,所以内存消耗较少。使用<code>Python2</code>的人被教导使用<code>dict.iteritems()</code>而不是<code>.items()</code>来提高效率,如下代码所述。</p>
<pre><code>import timeit
d = {i:i*2 for i in xrange(10000000)}
start = timeit.default_timer()
for key,value in d.items():
tmp = key + value #do something like print
t1 = timeit.default_timer() - start
start = timeit.default_timer()
for key,value in d.iteritems():
tmp = key + value
t2 = timeit.default_timer() - start
</code></pre>
<p>输出:</p>
<pre><code>Time with d.items(): 9.04773592949
Time with d.iteritems(): 2.17707300186
</code></pre>
<p>在Python3中,他们想使它更有效,所以将<code>dictionary.iteritems()</code>移到<code>dict.items()</code>,并移除不再需要的<code>.iteritems()</code>。</p>
<p>您在<code>Python3</code>中使用了<code>dict.iteritems()</code>,因此失败了。尝试使用与<code>Python2</code>的<code>dict.iteritems()</code>具有相同功能的<code>dict.items()</code>。这是一个从<code>Python2</code>到<code>Python3</code>的微小位迁移问题。</p>