擅长:python、mysql、java
<p>这里最大的问题是<code>tmpList.append(child.tag)</code>返回<code>None</code>。实际上,Python中几乎所有的变异方法都返回<code>None</code>。你知道吗</p>
<p>要解决这个问题,您可以进行变异,然后在单独的语句中插入值:</p>
<pre><code>for child in elem:
tmpList.append(child.tag)
tableWColumns[elem.tag] = tmpList
</code></pre>
<p>…或者一开始就不想改变名单。例如</p>
<pre><code>tableWColumns[elem.tag] = tmpList + [child.tag for child in elem]
</code></pre>
<hr/>
<p>这将消除您所有的值都是-<code>None</code>的问题,但是接下来您又遇到了一个新问题。如果任何标记出现多次,则只能从该标记的最后一个副本获取子级,而不是从所有副本获取子级。这是因为您每次都构建一个新列表,并将<code>tableWColumns[elem.tag]</code>重新分配给该新列表,而不是修改其中的任何内容。你知道吗</p>
<p>要解决此问题,需要将现有值提取到<code>tmpList</code>中,而不是创建新值:</p>
<pre><code>tmpList = tableWColumns.get(elem.tag, [])
tableWColumns[elem.tag] = tmpList + [child.tag for child in elem]
</code></pre>
<p>或者,正如<a href="https://stackoverflow.com/a/29669646/908494">Kasra's answer</a>所说,您可以通过使用<code>defaultdict</code>或<code>setdefault</code>方法来简化这个过程。你知道吗</p>