I had the same problem as here. It worked. But to finish I need a slightly different output: instead of having just
'childs': { ........... }
I would like to have:
'childs': { placeholder: 'Select', items: { ........... } }
Here's the present code:
#!/usr/bin/env python # -*- coding: utf-8 -*- import csv import re from collections import defaultdict from pprint import pprint parents = defaultdict(list) with open('data.csv',encoding="utf8") as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"') next(reader) count = 1 for row in reader: id_, name, admin_level, parent = row parents[parent].append((id_, name)) count += 1 def build_tree(d, val): return {'lc' + id_: {'val': 'lc' + id_, 'txt': name, 'childs': build_tree(d, id_)} for id_, name in d[val]} #pprint(build_tree(parents, '')) final = str(build_tree(parents, '')) print(final.replace(", 'childs': {}", ""))
The CSV used is:
@id,name,admin_level,parent_id 295480,Portugal,2, 2897141,Lisboa,3,295480 3920249,Aveiro,3,295480 5011694,Leiria,3,295480 5400843,Loures,4,2897141 5400844,Mafra,4,2897141
The present output is:
{'lc295480': {'childs': {'lc2897141': {'childs': {'lc5400843': {'txt': 'Loures', 'val': 'lc5400843'}, 'lc5400844': {'txt': 'Mafra', 'val': 'lc5400844'}}, 'txt': 'Lisboa', 'val': 'lc2897141'}, 'lc3920249': {'txt': 'Aveiro', 'val': 'lc3920249'}, 'lc5011694': {'txt': 'Leiria', 'val': 'lc5011694'}}, 'txt': 'Portugal', 'val': 'lc295480'}}