jdo*_*dot 12 python tree dictionary graph
有没有人知道任何Python库,它允许你简单快速地将它嵌套到任意级别的对象,例如沿着你在这个要点中找到的行的dict树,它可以吐出一个可行的树图形文件?
简单是关键,因为我必须能够与那些没有技术头脑的人一起工作.
我所说的"图树"是指下面的内容,我可以在其中提供一个嵌套的值字典,然后它将创建树结构:
我不确定这是你的想法,但这是我想到的第一件事.
blockdiag主要用作类似于Graphviz的独立文件处理器(存在Python接口).它接受一个文本文件作为输入,使用简单的语法,并生成图像作为输出.
您应该能够编写一个简单的填充程序来输出格式化输入到独立的blockdiag脚本的递归dict结构,或者导入blockdiag包的必要内部并直接驱动输出.
如果这看起来很有希望,我会看看是否可以提供一些示例代码.
编辑示例代码:
def print_blockdiag(tree, parent=None):
if not parent: print('blockdiag { orientation = portrait')
for key in tree:
if parent: print(' {} -> {};'.format(parent, key))
print_blockdiag(tree[key], key)
if not parent: print('}')
Run Code Online (Sandbox Code Playgroud)
这将输出blockdiag可以读取的文件.
所以我在这个答案中推荐和用于我的代码片段的库不是一个Python库,但它是一个Python友好的库,我的意思是使用这个库的代码可以插入到一个Python模块中来处理数据,这外部代码将在两端(即输入和输出)连接到现有的 python 代码,我怀疑,尽管我当然不知道,这就是“python 库”标准的真正含义。因此,如果您正在编写网络应用程序,则此代码将位于客户端。换句话说,这个库不是Python,但它可以与Python一起使用。
它的输入是(几乎)原始的 python dicts,更具体地说,json.load(a_python_dict)返回一个 json 数组或对象,这是这个 javascript 库当然可以识别的格式;和
输出格式是 HTML 或 SVG,而不是某些特定于语言的格式的对象
var tree = d3.layout.tree().size([h, w]);
Run Code Online (Sandbox Code Playgroud)
d3源代码的示例文件夹中还有几个树的示例(工作代码),您可以从我上面提供的链接克隆/下载它们。
因为 d3 是一个 javascript 库,所以它的原生数据格式是JSON。
基本结构是一个嵌套字典,每个字典代表一个具有两个值的节点,即节点的名称及其子节点(存储在数组中),分别以名称和子节点为键:
{"name": "a_root_node", "children": ["B", "C"]}
Run Code Online (Sandbox Code Playgroud)
当然,Python 字典和 JSON 之间的转换也很简单:
>>> d = {"name": 'A', "children": ['B', 'C']}
>>> import json as JSON
>>> dj = JSON.dumps(d)
>>> dj
'{"name": "A", "children": ["B", "C"]}'
Run Code Online (Sandbox Code Playgroud)
这是一个较大的树(十几个左右节点)的 Python字典表示形式,我将其转换为上面的 json,然后在d3中呈现为下图所示的树:
tree = {'name': 'root', 'children': [{'name': 'node 2', 'children':
[{'name': 'node 4', 'children': [{'name': 'node 10', 'size': 7500},
{'name': 'node 11', 'size': 12000}]}, {'name': 'node 5', 'children':
[{'name': 'node 12', 'children': [{'name': 'node 16', 'size': 10000},
{'name': 'node 17', 'size': 12000}]}, {'name': 'node 13', 'size': 5000}]}]},
{'name': 'node 3', 'children': [{'name': 'node 6', 'children':
[{'name': 'node 14', 'size': 8000}, {'name': 'node 15', 'size': 9000}]},
{'name': 'node 7', 'children': [{'name': 'node 8', 'size': 10000},
{'name': 'node 9', 'size': 12000}]}]}]}
Run Code Online (Sandbox Code Playgroud)

注意:d3 在浏览器中呈现;上图只是我的浏览器窗口的屏幕截图。
| 归档时间: |
|
| 查看次数: |
13776 次 |
| 最近记录: |