Создать дерево из данного файла JSON в Python - PullRequest
0 голосов
/ 29 октября 2019

Я новичок в 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': {}}}

Это почти то, что я хочу достичь,но это не хорошоЧто я делаю не так?

1 Ответ

0 голосов
/ 29 октября 2019

Я попытался организовать данные в вашем формате. Посмотрите

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...