首页 > 解决方案 > 在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': {}}}

这几乎是我想要达到的,但并不好。我究竟做错了什么?

标签: pythonjsontree

解决方案


我试图以您的格式组织数据。看一看

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)

推荐阅读