来自多个字符串的树图,Python

时间:2016-07-06 21:10:41

标签: python

我有一组结构化字符串。有没有一种干净的方法用树形图可视化这些数据?我目前正在阅读http://www.graphviz.org/https://pypi.python.org/pypi/pydot,但似乎我必须进行大量重构才能使我的字符串符合其格式。

String                           Occurrence
A:B:C:D                          355
A:B:C:D:F                        330
A:B:C:E:H                        78
A:B:C:D:G                        37
A:B:C:E:I                        33
...                              ...

编辑:有没有办法让工具读取这个":"分开的数据格式? enter image description here

2 个答案:

答案 0 :(得分:1)

不是“简单”方法,但此脚本会将您的文件解析为树,每个“大小”值都存储在None索引中:

<强> tree.txt

A:B:C:D                          355
A:B:C:D:F                        330
A:B:C:E:H                        78
A:B:C:D:G                        37
A:B:C:E:I                        33

<强> tree.py

import re
f = open('tree.txt', 'r')
tree = {}
for line in f:
    parts = re.split('\s+', line)
    if parts[0] and parts[1]:
        pointer = tree
        node = parts[0].split(':')
        for key in node:
            if not key in pointer:
                pointer[key] = {None: None}
            pointer = pointer[key]
        try:
            pointer[None] = int(parts[1])
        except:
            pass
print(tree)

tree将如下所示:

{
    'A': {
        'B': {
            'C': {
                'D': {
                    'F': {None: 330},
                    'G': {None: 37}, 
                    None: 355
                },
                'E': {
                    'H': {None: 78}, 
                    'I': {None: 33}, 
                    None: None
                },
                None: None
            },
            None: None
        },
        None: None
    }
}

答案 1 :(得分:0)

通过转换&#34;:&#34;进入&#34; - &gt;&#34;用.DOT格式化包装,绘图很容易。

digraph graphname {
 A -> B -> C -> D;
 A -> B -> C -> D -> F;
 A -> B -> C -> E -> H;
 A -> B -> C -> D -> G;
 A -> B -> C -> E -> I;
}

我在这里测试了我的一小段代码:http://sandbox.kidstrythisathome.com/erdos/