Я хочу создать дерево JSON из CSV с иерархией id + parent.Это работает, но я хочу, чтобы вывод немного отличался.Вместо того, чтобы возвращать просто:
'childs': { ........... }
Я хотел бы, чтобы он возвращал:
'childs': { placeholder: 'Select', items: { ........... } }
Или просто:
'childs': { items: { ........... } }
Вот код, который я использую:
#!/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': {}", ""))
Файл data.csv, который я использую:
@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
Текущий вывод:
{'lc295480': {'childs': {'lc2897141': {'childs': {'lc5400843': {'childs': {},
'txt': 'Loures',
'val': 'lc5400843'},
'lc5400844': {'childs': {},
'txt': 'Mafra',
'val': 'lc5400844'}},
'txt': 'Lisboa',
'val': 'lc2897141'},
'lc3920249': {'childs': {},
'txt': 'Aveiro',
'val': 'lc3920249'},
'lc5011694': {'childs': {},
'txt': 'Leiria',
'val': 'lc5011694'}},
'txt': 'Portugal',
'val': 'lc295480'}}