python - 在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)
推荐阅读
- mysql - MySQL 在 my.cnf 文件中设置 innodb_buffer_pool_size - 未找到
- mongodb - 仅当文档不存在时如何将文档添加到 mongo
- css - 如何使用 _app.js (Next.js) 中声明的全局 css 文件中的 css 类
- python - 如何将 Python 脚本添加到 HTML
- php - 如何使用 php 在邮件中提交联系表格?
- python - 腌制数据类的实例
- java - Docker MySQL在超时后丢弃表:连接关闭后不允许操作
- javascript - 使用 PHP 时钟显示“我们明天在 _____ 重新开放”
- c - 访问作为结构数组传递给函数的结构成员
- r - 如何在 R 中将所有日期更改为相同的格式(如果列有一堆不同的字符格式)?