将元组附加到给定ID的列表中

时间:2018-09-30 13:33:15

标签: python xml list for-loop tuples

我有一个带有多个节点的xml文件,每个节点都有不同的数据。我的目标是创建一个包含值的元组的列表,其中每个值都包含该信息,但努力做到这一点。

<node id="950073331">
  <data key="d4">39.22685</data>
  <data key="d5">-4.58879</data>
  <data key="d6">950073331</data>
</node>
<node id="950073335">
  <data key="d4">39.22708</data>
  <data key="d5">-4.58489</data>
  <data key="d6">950073335</data>
</node>

这是我的代码,但是它为每个数据打印一个相同节点的元组,而不是在切换到下一个节点之前将所有数据添加到相同的元组中。

nodes = []
for node in root.findall('n:graph/n:node',ns):
    id = node.get('id')
    for data in node:
        if (data.get('key')) != 'd6':
            coordinates = data.text
            nodes.append((id,coordinates))
print(nodes)

输出

nodes = [('950073331', '39.22685'), ('950073331', '4.58879'),
         ('950073335', '39.22708'), ('950073335', '4.58489') ... ]

我想要的输出:

nodes = [('950073331', '39.22685', '4.58879'),
         ('950073335', '39.22708', '4.58489') ... ]

PS:抱歉,python和xml :/中的一个菜鸟很简单

1 个答案:

答案 0 :(得分:2)

您要创建一个tuple,其中包含每个节点的所有数据。但是,您需要为节点内的每个数据点创建一个。您可以例如:

nodes = []
for node in root.findall('n:graph/n:node',ns):
    data_lst = [node.get('id')]
    for data in node:
        if data.get('key') != 'd6':
            data_lst.append(data.text)
    nodes.append(tuple(data_lst))
print(nodes)

或者在Python3中,您可以做得更短:

nodes = []
for node in root.findall('n:graph/n:node',ns):
    id = node.get('id')
    nodes.append((id, *(data.text for data in node if data.get('key') != 'd6')))
print(nodes)