擅长:python、mysql、java
<p>问题是因为您在每个迭代中创建<code>tmpList = []</code>列表并将其放入<code>[]</code>,所以python在每个迭代中将新的替换为旧的,这样您就可以在列表中看到最后一个迭代结果。你知道吗</p>
<p>相反,您可以使用<a href="https://docs.python.org/2/library/collections.html#collections.defaultdict" rel="nofollow">^{<cd3>}</a>:</p>
<pre><code>from collections import defaultdict
d=defaultdict(list)
for elem in xmlTree.iter():
# skipping root element
if elem.tag == xmlTree.getroot().tag:
continue
# this is supposed to be my temporary list
for child in elem:
d[elem.tag].append(child.tag)
print(tableWColumns)
</code></pre>
<p>或者可以使用<a href="https://docs.python.org/2/library/stdtypes.html#dict.setdefault" rel="nofollow">^{<cd4>}</a>方法:</p>
<pre><code>d={}
for elem in xmlTree.iter():
# skipping root element
if elem.tag == xmlTree.getroot().tag:
continue
# this is supposed to be my temporary list
for child in elem:
d.setdefault(elem.tag,[]).append(child.tag)
print(tableWColumns)
</code></pre>
<p>另请注意,@abarnert说<code>tmpList.append(child.tag)</code>将返回<code>None</code>,因此在赋值之后实际上python将<code>None</code>赋值给<code>tableWColumns[elem.tag]</code>。你知道吗</p>