2012-07-09 3 views
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 

입니다 : 나는 등 같은 탭 출력을 얻기 위해 노력하고 있어요 그리고 그것은 다른 변수와의 거리를 나타 내기 때문입니다. 이것은 나무 디자인이므로 탭과 들여 쓰기가 다를 수 있습니다. I 이름 변수를 나타내는

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 가지 수준의 ind가 있어야합니다. entations,

루트, '0.1' 'A : 0.1'의

의 3 자녀; ': 0.9'; '0.5',

및 '0.9'과 '0.5의 아이들, H, I, B, C 및 D

이 충분한 정보가없는 경우 내가 사과, 내가 어떻게 그냥 확실하지 오전 위에 표시된 것과 같은 기본 탭 출력을 작성하십시오.

감사합니다.

편집 : 내 답변을 받았습니다 감사합니다!

+0

"\ t"탭을 만들 것입니다 ... –

+3

생성하는 데 사용한 코드를 게시 할 수 있습니까? – Blender

+1

재귀를 사용하여 데이터 구조를 탐색하는 경우 함수에'depth' 인수를 쉽게 전달할 수 있으며'\ t "* depth'와 같은 것을 앞에 출력 할 수 있습니다. –

답변

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 
>>> 
+2

가능한 경우 - 여기에 나와있는대로 정렬 된 키 (또는 키, 쌍 쌍)를 반복하는 것이 더 좋습니다. 사전이 어떻게 든 정렬되어 있기 때문에 출력이 재현 가능하고 따라서 작업하기가 쉽기 때문입니다. – DSM

+0

@DSM : 좋은 지적입니다. 나는 반영하도록 편집 중입니다. –

관련 문제