Python选项卡创建

时间:2012-07-09 20:31:19

标签: python printing tabs indentation creation

好吧,我是python的新手,用这种语言创建简单的标签有点让我感到困惑。 我试图获得这样的标签输出:

:0.1
  A:0.1
  :0.9
    H:2.2
    I:3.0
    B:0.2
  :0.5
    C:0.3
    D:0.4

它是节点的名称,冒号,':'及其对应的距离,没有名称的节点由'None'指定,这是因为它们仅代表到另一个变量的距离。这是树设计,因此标签和缩进可以变化。 我从

收集这些信息
self.name

表示名称变量,以及

self.distance

表示距离

信息的缩减输出如下所示:

A : 0.1
H : 2.2
I : 3.0
B : 0.2
None : 0.9
C : 0.3
D : 0.4
None : 0.5
None : 0.1

应该有3个级别的缩进,

根,':0.1',

其3个孩子的'A:0.1'; ':0.9'; ':0.5',

和':0.9'和':0.5的孩子,H,I,B,C和D

如果这个信息不够,我很抱歉,我只是不确定如何创建一个基本的标签输出,就像我上面显示的那样。

谢谢!

编辑:收到我的回答谢谢!

1 个答案:

答案 0 :(得分:4)

假设您有一个类似树的数据结构。为简单起见,我将在本例中使用嵌套的dict:

data = {
    "A": {"value": 0.2, "children": {
            "D": {"value": 0.3, "children": {}},
            "E": {"value": 0.4, "children": {
                    "H": {"value": 0.5, "children": {}},
                    "I": {"value": 0.6, "children": {}}
                }
            }
        }
    },
    "B": {"value": 0.7, "children": {
            "C": {"value": 0.8, "children": {}},
            "D": {"value": 0.9, "children": {}}
        }
    }
}

您可以使用以下递归函数遍历并打印它:

from operator import itemgetter

def display(tree, depth=0):
    prepend = "\t" * depth
    for key, val in sorted(tree.items()):
        print "{0}{1}: {2}".format(prepend, key, val['value'])
        if val['children']:
            display(val['children'], depth + 1)

显示以下输出:

>>> display(data)
A: 0.2
    D: 0.3
    E: 0.4
        H: 0.5
        I: 0.6
B: 0.7
    C: 0.8
    D: 0.9
>>>