怎么使用python字典生成树状图
短信预约 -IT技能 免费直播动态提醒
这篇文章主要介绍了怎么使用python字典生成树状图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用python字典生成树状图文章都会有所收获,下面我们一起来看看吧。
python字典生成树状图
from graphviz import Digraph# 获取所有节点中最多子节点的叶节点def getMaxLeafs(myTree): numLeaf = len(myTree.keys()) for key, value in myTree.items(): if isinstance(value, dict): sum_numLeaf = getMaxLeafs(value) if sum_numLeaf > numLeaf: numLeaf = sum_numLeaf return numLeafdef plot_model(tree, name): g = Digraph("G", filename=name, format='png', strict=False) first_label = list(tree.keys())[0] g.node("0", first_label) _sub_plot(g, tree, "0") leafs = str(getMaxLeafs(tree) // 10) g.attr(rankdir='LR', ranksep=leafs) g.view()root = "0"def _sub_plot(g, tree, inc): global root first_label = list(tree.keys())[0] ts = tree[first_label] for i in ts.keys(): if isinstance(tree[first_label][i], dict): root = str(int(root) + 1) g.node(root, list(tree[first_label][i].keys())[0]) g.edge(inc, root, str(i)) _sub_plot(g, tree[first_label][i], root) else: root = str(int(root) + 1) g.node(root, tree[first_label][i]) g.edge(inc, root, str(i))tree = { "tearRate": { "reduced": "no lenses", "normal": { "astigmatic": { "yes": { "prescript": { "myope": "hard", "hyper": { "age": { "young": "hard", "presbyopic": "no lenses", "pre": "no lenses" } } } }, "no": { "age": { "young": "soft", "presbyopic": { "prescript": { "myope": "no lenses", "hyper": "soft" } }, "pre": "soft" } } } } } }plot_model(tree, "tree.gv")
效果如下:
python生成树结构
# 生成树结构def get_trees(data, key_column='elementId', parent_column='parentId', child_column='children'): """ :param data: 数据列表 :param key_column: 主键字段,默认id :param parent_column: 父ID字段名,父ID默认从0开始 :param child_column: 子列表字典名称 :return: 树结构 """ data_dic = {} for d in data: data_dic[d.get(key_column)] = d # 以自己的权限主键为键,以新构建的字典为值,构造新的字典 data_tree_list = [] # 整个数据大列表 for d_id, d_dic in data_dic.items(): pid = d_dic.get(parent_column) # 取每一个字典中的父id if not pid: # 父id=0,就直接加入数据大列表 data_tree_list.append(d_dic) else: # 父id>0 就加入父id队对应的那个的节点列表 try: # 判断异常代表有子节点,增加子节点列表=[] data_dic[pid][child_column].append(d_dic) except KeyError: data_dic[pid][child_column] = [] data_dic[pid][child_column].append(d_dic) return data_tree_list def recursion(data, l=None): if l is None: l = [] for i in data: if 'children' in i: children=i.pop('children') l.append(i) recursion(children,l) else: l.append(i) return l
关于“怎么使用python字典生成树状图”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么使用python字典生成树状图”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341