[英]How to creating recursive JSON hierarchy tree?
您可以看到父級的名稱是顏色以 child_id 0 開頭,子級是紅色和藍色,將 id 與顏色綁定。
我想把表里的數據弄成Json怎么辦?
我的數據
import pandas as pd
data = {
'id': ['2', '13', '14', '15'],
'name': ['color', 'red', 'blue', 'ruby red'],
'child_id': ['0', '2', '2', '13']
}
df = pd.DataFrame(data)
df
預計 Output
[
{
"name": "color",
"id": 2,
"child_id": 0,
"children": [
{
"name": "red",
"id": 13,
"child_id": 2,
"children": [
{
"name": "ruby red",
"id": 15,
"child_id": 13,
}
]
},
{
"name": "blue",
"id": 14,
"child_id": 2
}
]
}
]
將其視為一棵樹並在字典上應用簡單的遍歷,字典是由df.to_dict()
從 df 轉換而來的。 添加了類型注釋。 希望你能理解。
from dataclasses import dataclass, field, asdict
from pprint import pprint
from typing import List, Dict, Optional
import pandas as pd
from pandas import DataFrame
@dataclass
class Tree:
name: str
id: int
child_id: int
children: List['Tree'] = field(default_factory=list)
def traversal(df: DataFrame) -> Optional[Tree]:
tmp: List[Tree] = [Tree(name=i["name"], id=int(i["id"]), child_id=int(i["child_id"])) for i in df.to_dict("records")]
memo: Dict[int, Tree] = {i.id: i for i in tmp}
root = None
for i in tmp:
if i.child_id == 0:
root = i
else:
memo[i.child_id].children.append(i)
return root
if __name__ == '__main__':
data = {
'id': ['2', '13', '14', '15'],
'name': ['color', 'red', 'blue', 'ruby red'],
'child_id': ['0', '2', '2', '13']
}
dataframe = pd.DataFrame(data)
res = traversal(dataframe)
if res:
pprint([asdict(res)])
else:
print("err")
Output:
[{'child_id': 0,
'children': [{'child_id': 2,
'children': [{'child_id': 13,
'children': [],
'id': 15,
'name': 'ruby red'}],
'id': 13,
'name': 'red'},
{'child_id': 2, 'children': [], 'id': 14, 'name': 'blue'}],
'id': 2,
'name': 'color'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.