0

我昨天学了python。我正在尝试解析 XML 文件并将值放入字典中。

xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
d ={ }
for child in root:
   d[child.tag] = child.attrib
   print child.tag, child.attrib
   print("\n")
for k,v in d.items():
   print(k,v)

现在该语句d[child.tag] = child.attrib每次都被重写而不是被更新。

所以我得到的输出是 -

country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}

('country', {'name': 'Panama'})

前三行输出是由于print(). 最后一行来自字典。

我怎样才能有效地做到这一点,以便我的字典存储所有三行?

4

3 回答 3

2

你可以使用collections.defaultdict

from collections import defaultdict

d = defaultdict(list)
for child in root:
    d[child.tag].append(child.attrib)

如果 allroot的直接子级具有相同的标签,那么您可以只使用一个列表:

L = [child.attrib for child in root]
于 2013-03-20T06:52:16.000 回答
1

标准 Pythondict是无序的 - 因此,您不能,除非您使用Python 3.1 中可用的OrderedDict 。

于 2013-03-20T06:45:01.443 回答
0

行。如果您的唯一目标是拯救这三个国家,那么最好使用列表而不是字典。字典用于将键与值相关联,并且键必须是不同的。您name每次都将其用作密钥,这就是为什么每个条目都覆盖前一个条目的原因。

所以你可以做类似的事情

d = []
for child in root:
    d.append(child.attrib)

如果您实际上有要关联某些值的不同键,那么您可以使用字典。但是您必须能够保证键是不同的。

于 2013-03-20T06:54:40.043 回答