<p>这不需要嵌套循环。对于每个外部值(dict键),您只需要一个内部值(dict值)。因此,内部循环的大小应为1,这根本不是循环</p>
<p>但是,您当然必须将内部值与外部值对齐。在大多数经典编程语言中,这可以通过在用于处理这两个项的索引上循环来实现,即</p>
<pre><code># Naive way
dictData = {}
for i in range(2, len(ws1[3])):
dictData[ws1[3][i].value] = ws1[5][i].value
</code></pre>
<p>然而,这并不是很像Python,因为Python允许直接在值上循环。但仅在外部值上循环,仍然需要内部值的索引。可以使用循环中的<code>enumerate</code>来获取值及其索引:</p>
<pre><code># Enumerate inner value (not very nice)
dictData = {}
for i, key in enumerate(ws1[3][2:], 2):
dictData[key.value] = ws1[5][i].value
</code></pre>
<p>不过,由于我们仍然需要一个索引,因此这并没有带来多少好处。我们确实希望能够直接从循环中获取dict键和dict值。瞧,Python为我们准备了一个解决方案,即使用<code>zip</code>,它允许我们在一个<code>for</code>循环中对齐两个系列:</p>
<pre><code># Using zip, nicer and more pythonic
dictData = {}
for key, value in zip(ws1[3][2:], ws1[5][2:]):
dictData[key.value] = value.value
</code></pre>
<p>现在我们正在取得进展。这更像它,但我们可以更进一步,使用所谓的dict理解,它允许我们一次性创建和分配dict:</p>
<pre><code># dict comprehension
dictData = {key.value: value.value for key, value in zip(ws1[3][2:], ws1[5][2:])}
</code></pre>
<p>我想说,虽然我更喜欢听写理解,因为我觉得它很容易阅读,但你的理解可能会有所不同</p>
<p>另外,作为最后一点,为了让代码感觉更像python,将camelCased<code>dictData</code>替换为更符合PEP8的形式<code>dict_data</code>。但是,只有在项目中的所有变量都使用这种样式时,这才是正确的。更重要的是保持一致</p>