我是python的新手并且学习读取xml文件。 运行我的代码来附加项目给了我重复的数组。我想它是循环遍历所有追加的项目并且每次都返回一个数组。我只想要一个数组所有项目的数组。我做错了什么?
代码如下:
countries_im = []
for country in root.findall('./country'):
data = {
'name': None,
'infant_mortality': None
}
data['name'] = country.find('./name').text
data['infant_mortality'] = country.findtext('./infant_mortality')
if data['infant_mortality'] is not None:
countries_im.append(data['infant_mortality'])
print(countries_im)
结果如下:
['13.19']
['13.19', '4.78']
['13.19', '4.78', '7.9']
['13.19', '4.78', '7.9', '6.16']
['13.19', '4.78', '7.9', '6.16', '3.69']
['13.19', '4.78', '7.9', '6.16', '3.69', '3.31']
我只想要最后一个数组。谢谢你的帮助
答案 0 :(得分:2)
您的代码未返回多个列表。事实上,它没有返回任何东西。您只有一个现有列表通过追加更改其内容。
您显示的结果是每次将项目追加到列表时调用print(countries_im)
的输出。
如果您将代码更改为:
countries_im = []
for country in root.findall('./country'):
data = {
'name': None,
'infant_mortality': None
}
data['name'] = country.find('./name').text
data['infant_mortality'] = country.findtext('./infant_mortality')
if data['infant_mortality'] is not None:
countries_im.append(data['infant_mortality'])
print(countries_im)
您将看到内存中的列表中包含所有项目。
答案 1 :(得分:1)
如果我理解正确,您的代码是正确的,您只需要将print
语句移到for
循环之外。换句话说,每次添加内容时都会打印相同的数组。因此,在for
循环(已完成的数组)结束时,您最终会得到您想要的结果。