Advertisement
Guest User

Untitled

a guest
Jan 4th, 2022
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.87 KB | None | 0 0
  1. import json
  2. from typing import List
  3. import pandas as pd
  4.  
  5. class People():
  6.     def __init__(self, js_data, label_prefix:List=None):
  7.         self.id = js_data['id']
  8.  
  9.         if label_prefix == None:
  10.             self.label = [js_data['label']]
  11.         else:
  12.             self.label = label_prefix + [js_data['label']]
  13.  
  14.         self.child = [People(child_js, self.label) for child_js in js_data['child']]
  15.  
  16.     def get_label_i(self, i:int):
  17.         if i >= len(self.label):
  18.             return ''
  19.         else:
  20.             return self.label[i]
  21.  
  22. def get_all_instance(p:People):
  23.     result = []
  24.     result.append(p)
  25.     for child in p.child:
  26.         result += get_all_instance(child)
  27.     return result
  28.  
  29.  
  30.  
  31. str_json = '{"id":"S0","label":"部门","child":[{"id":"S1","label":"管理层","child":[]},{"id":"S2","label":"人力资源部","child":[{"id":"S21","label":"招聘组","child":[{"id":"S210","label":"上海组","child":[{"id":"S2101","label":"上海其他","child":[]},{"id":"S2102","label":"陆家嘴","child":[]}]},{"id":"S211","label":"深圳组","child":[]},{"id":"S212","label":"北京组","child":[]}]},{"id":"S22","label":"考核组","child":[]},{"id":"S23","label":"制度组","child":[]}]},{"id":"S3","label":"行政管理部","child":[{"id":"S31","label":"后勤组","child":[]},{"id":"S31","label":"食堂组","child":[]}]},{"id":"S4","label":"信息技术部","child":[{"id":"S41","label":"运行部","child":[{"id":"S411","label":"运维组","child":[]}]}]}]}'
  32. js = json.loads(str_json)
  33.  
  34. root_instance = People(js)
  35. all_instance = get_all_instance(root_instance)
  36.  
  37. df = pd.DataFrame()
  38. df['id'] = [i.id for i in all_instance]
  39.  
  40. max_depth_people = max(all_instance, key=lambda x: len(x.label))
  41. label_depth = len(max_depth_people.label)
  42.  
  43. for label_num in range(label_depth):
  44.     df[f"label{label_num}"] = [i.get_label_i(label_num) for i in all_instance]
  45.  
  46. print(df)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement