How To Create Nested List Of Dictionaries From Xml File In Python
This XML sample represents a sample Metabolite from the HMDB the Serum Metabolites dataset. <
Solution 1:
The problem with the first code snippet is probably reassigning the new dictionary to the variable dict:
newlist = []
for child in metabolites:
innerlist = []
dicts = {}
for subchild in child:
if subchild.tag=='{http://www.hmdb.ca}accession':
dicts={"accession": subchild.text}
if subchild.tag == '{http://www.hmdb.ca}name':
# here the old value of dict is overriden with new value
dicts = {"name": subchild.text}
innerlist.append(subchild.text)
print(innerlist)
newlist.append(dicts)
You should probably use assignment in form dict[key] = value:
newlist = []
for child in metabolites:
innerlist = []
dicts = {}
for subchild in child:
if subchild.tag=='{http://www.hmdb.ca}accession':
dicts["accession"] = subchild.text
if subchild.tag == '{http://www.hmdb.ca}name':
dicts["name"] = subchild.text
innerlist.append(subchild.text)
print(innerlist)
newlist.append(dicts)
Similar problem seems to be also with the second code snippet:
newlist = []
forchildin metabolites:
dicts = {}
innerlist = []
forsubchildin child:
if subchild.tag == '{http://www.hmdb.ca}synonyms':forsynonymin subchild:
innerlist.append(synonym.text)
dicts["synonyms"] = innerlist
newlist.append(dicts)
But (as it was already pointed out) you could use some more convenient libraries instead of parsing XML manually.
Here is merged script:
newlist = []
for child in metabolites:
dicts = {}
innerlist = []
for subchild in child:
if subchild.tag=='{http://www.hmdb.ca}accession':
dicts["accession"] = subchild.text
if subchild.tag == '{http://www.hmdb.ca}name':
dicts["name"] = subchild.text
if subchild.tag == '{http://www.hmdb.ca}synonyms':
for synonym in subchild:
innerlist.append(synonym.text)
dicts["synonyms"] = innerlist
newlist.append(dicts)
print(newlist)
It outputs following result:
[{'accession': 'HMDB0000001', 'name': '1-Methylhistidine', 'synonyms': ['(2S)-2-amino-3-(1-Methyl-1H-imidazol-4-yl)propanoic acid', '1-Methylhistidine', 'Pi-methylhistidine', '(2S)-2-amino-3-(1-Methyl-1H-imidazol-4-yl)propanoate', '1 Methylhistidine', '1-Methyl histidine']}]
Post a Comment for "How To Create Nested List Of Dictionaries From Xml File In Python"