如何在字典末尾添加值

时间:2013-03-20 06:39:19

标签: python xml parsing dictionary

昨天我学习了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()。最后一行来自字典。

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

3 个答案:

答案 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。但是你必须能够保证密钥是不同的。