昨天我学习了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()
。最后一行来自字典。
我怎样才能有效地做到这一点,以便我的词典存储所有三行?
答案 0 :(得分:2)
您可以使用collections.defaultdict
:
from collections import defaultdict
d = defaultdict(list)
for child in root:
d[child.tag].append(child.attrib)
如果所有root
的直系孩子都有相同的标签,那么您可以使用一个列表:
L = [child.attrib for child in root]
答案 1 :(得分:1)
标准Python dict
是无序的 - 所以,你不能,除非你使用Python 3.1中提供的OrderedDict。
答案 2 :(得分:0)
确定。如果您的唯一目标是保存这三个国家/地区,那么您最好使用列表而不是字典。 Dicts用于将键与值相关联,键必须是不同的。您每次都使用name
作为密钥,这就是为什么每个条目都会覆盖前一个条目。
所以你可以做一些像
这样的事情d = []
for child in root:
d.append(child.attrib)
如果您确实拥有要将某些值关联到的不同键,则可以使用dict。但是你必须能够保证密钥是不同的。