1

好吧,我是 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',

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

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

如果这没有足够的信息,我很抱歉,我只是不确定如何创建一个基本的选项卡式输出,就像我上面显示的那样。

谢谢!

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

4

1 回答 1

4

假设您有一个树状数据结构。为简单起见,我将在此示例中使用嵌套字典:

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
>>> 
于 2012-07-09T21:04:15.120 回答