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

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

ツリーのようなデータ構造があるとします。簡単にするために、この例ではネストされた 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
>>> 
于 2012-07-09T21:04:15.120 に答える