Добавить кортеж в список для данного идентификатора - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть XML-файл с несколькими узлами, каждый из которых имеет разные данные.Моя цель состоит в том, чтобы создать список с кортежами значений, содержащих эту информацию для каждого, но изо всех сил пытаясь ее получить.вместо добавления всех данных в один и тот же перед переключением на следующий узел.

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 голосов
/ 30 сентября 2018

Вы хотите создать один 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...