从python中给定的json文件创建树



我是python的新手,我必须基于json文件创建一个树。

我有一个json文件,看起来像这样:

[
{"category": "Vehicle","parent_category": null},
{"category": "Bicycle","parent_category": "Vehicle"},
{"category": "One-wheeled bicycle","parent_category": "Bicycle"},
{"category": "Two-wheeled bicycle","parent_category": "Bicycle"},
{"category": "Motor vehicle","parent_category": "Vehicle"},
{"category": "Motorcycle","parent_category": "Motor vehicle"},
{"category": "Car","parent_category": "Motor vehicle"},
{"category": "Truck","parent_category": "Motor vehicle"},
{"category": "Bus","parent_category": "Motor vehicle"},
{"category": "Aircraft","parent_category": "Vehicle"},
{"category": "Airplane","parent_category": "Aircraft"},
{"category": "Helicopter","parent_category": "Aircraft"},
{"category": "Spacecraft","parent_category": "Vehicle"},
{"category": "Railed vehicle","parent_category": "Vehicle"},
{"category": "Train","parent_category": "Railed vehicle"},
{"category": "Tram","parent_category": "Railed vehicle"},
{"category": "Watercraft","parent_category": "Vehicle"},
{"category": "Ship","parent_category": "Watercraft"},
{"category": "Boat","parent_category": "Watercraft"}
]

我必须根据json文件中给出的关系创建一个树。类似:

{'Vehicle':{'Aircraft':{'Airplane':{},'Helicopter':{},
{'Bicycle':{'One-wheeled bicycle':{}...

我有以下代码:

import pprint
import json
lists = []
f = open('vechicles.json')
data = json.load(f)
f.close()
for i in range(len(data)):
lists.append([data[i]['category'],data[i]['parent_category']])
def formTree(list): 
tree = {} 
for item in list: 
currTree = tree 
for key in item[::-1]: 
if key not in currTree: 
currTree[key] = {} 
currTree = currTree[key] 
return tree 
pprint.pprint(formTree(lists)) 

它产生以下输出:

{None: {'Vehicle': {}},
'Aircraft': {'Airplane': {}, 'Helicopter': {}},
'Bicycle': {'One-wheeled bicycle': {}, 'Two-wheeled bicycle': {}},
'Motor vehicle': {'Bus': {}, 'Car': {}, 'Motorcycle': {}, 'Truck': {}},
'Railed vehicle': {'Train': {}, 'Tram': {}},
'Vehicle': {'Aircraft': {},
'Bicycle': {},
'Motor vehicle': {},
'Railed vehicle': {},
'Spacecraft': {},
'Watercraft': {}},
'Watercraft': {'Boat': {}, 'Ship': {}}}

这几乎是我想要实现的,但并不好。我做错了什么?

我已经尝试过以您的格式组织数据。看看

from collections import defaultdict
df = pd.DataFrame(data)
d = defaultdict(lambda: defaultdict(list))
for row in df.itertuples():    
d[row[2]][row[1]].append('') # any value
print(d)

最新更新