2016-06-05 3 views
0

저는 계층 적으로 구성된 데이터 세트에 일련의 번호가 매겨진 그룹이 있습니다. 각 그룹에는 번호가 매겨진 제목이 있으며 그 그룹의 여러 멤버가 있습니다. 예 :Python에서 계층 적 구조를 반복합니다.

01 : Tony, John, Meredith 
01.01 : Alex, Fred, Melissa 
02 : Alley, Henry, Natalie 
02.01.02 : Chris, Pete 
03 : Andrew 
03.01 : Nancy, Peter, Harold 

이러한 그룹을 구성하기 위해 파이썬에서 사용해야하는 데이터 구조는 무엇입니까? 01.01이 0.1의 하위가되도록 계층 구조를 유지해야합니다. 데이터의 구조는 01.03.01.01.02.04.05와 같이 7 단계까지 올라갑니다.이 그룹은 01.03.01.01.02.04 그룹의 하위 그룹입니다. 어떤 도움이라도 대단히 감사합니다. 나는 그것을 반복 할 수 있도록 어떤 데이터 구조를 만들지 모르겠다. 감사.

+0

링크 된 목록 또는 트리. 당신은 분명히 그 데이터를 위해 직접 만들 필요가 있습니다. –

답변

1

"이 그룹을 구성하기 위해 파이썬에서 사용해야하는 데이터 구조는 무엇입니까?"

하향식 프로그래밍의 핵심 원리는 구조에 대해 수행 할 작업뿐만 아니라 상대적인 빈도 및 기타 기준 (예 : 데이터 구조)을 결정할 때까지 추상 데이터 구조의 구현을 결정하지 않는 것입니다 단순성과 메모리 사용 등). 귀하는 해당 정보를 명시하지 않으므로 특정 구현을 권장 할 수 없습니다.

트리, 목록 내의 목록, 사전 내의 사전 등은 각각의 장점과 단점이 있습니다. 나는 한 점에 대해 궁금해. 구조에서 새 하위 수준의 모든 항목은 '02'로 시작하는 '02 .01.02 : Chris, Pete '를 제외하고는'01 '로 시작합니다. 그게 의도적 인거야? 그렇지 않으면 명백한 번호 매기기를 유지하면 몇 가지 간단한 구현이 열립니다.


귀하의 의견에 추가 된 정보를 사용하여 중첩 목록을 권장합니다. 각 데이터 항목에는 0으로 끝나는 일련의 인덱스가 있으며 그 밖의 다른 데이터 항목 및 목록을 보유하는 목록입니다. 예를 들어, 전체 구조의 이름을 a으로하면 항목 01은 a[1][0]이고, 항목 01.01은 a[1][1][0]이고, 항목 02.01.02는 a[2][1][2][0]입니다. 이 구조를 사용하면 나중에 더 많은 항목을 삽입 할 수 있으므로 다른 항목을 방해하지 않으면 서 항목 01.01.01을 쉽게 추가 할 수 있습니다. 구조에 항목 번호를 저장할 필요가 없습니다. 구조의 데이터 항목 위치에서 직접 추론됩니다.

이 구현을 통해 전체 구조에 빈 항목 번호가 있으며 a[0]에 저장된 데이터 항목을 가질 수 있습니다. 누락 된 데이터 항목은 None으로 표시 될 수 있으며 빈 항목은 ''과 같은 다른 빈 항목이 될 수 있습니다. 여기에 예제 구조와 그것을 인쇄하는 코드를 보여주는 코드가 있습니다.

def print_structure(structure, level=''): 
    """Iterate through a heirarchical data structure, printing the data 
     items with their level numbers""" 
    for i, item in enumerate(structure): 
     if i == 0: 
      # Process each data item appropriately 
      if item is not None: 
       print(level + ' : ' + str(item)) 
     else: 
      new_level = format(i, '02') 
      if level: 
       new_level = level + '.' + new_level 
      print_structure(item, new_level) 


a = [None, 
    ['Tony, John, Meredith', 
     ['Alex, Fred, Melissa']], 
    ['Alley, Henry, Natalie', 
     [None, 
     ['?'], 
     ['Chris, Pete']]], 
    ['Andrew', 
     ['Nancy, Peter, Harold']]] 

print_structure(a) 

이 구현에서 각 "그룹"은 문자열입니다. 그룹이 있다고 말한 곳에 '?' 그룹을 뒀지 만 그게 무엇인지 진술하지 않았고, 데이터 아이템이 있다고 말하지 않은 None을 넣었습니다. 구조체의 처리를 변경하려면, 주석 뒤의 두 행을 변경하십시오. Process each data item appropriately. 위 코드의 출력물은

01 : Tony, John, Meredith 
01.01 : Alex, Fred, Melissa 
02 : Alley, Henry, Natalie 
02.01.01 : ? 
02.01.02 : Chris, Pete 
03 : Andrew 
03.01 : Nancy, Peter, Harold 

입니다. JSON에서 저장하고 복원하는 것은 쉽습니다. 물론 이것은 구조 나 코드 중 일부를 수정할 수 있지만 사용자의 요구를 충족해야합니다.

+0

Rory, 답장을 보내 주셔서 감사합니다. 각 하위 수준은 실제로 01로 시작합니다. 실제로 인용 한 예제에서 '02 .01.01 '그룹이 있습니다. 나는 계층 구조에있는 아이들의 다른 예를 보여주기 위해 노력했습니다. 데이터로 수행하고자하는 측면에서 일단 구조가 반복되면 구조를 반복하고 구조가 그대로 유지 된 json 파일을 작성합니다. 데이터베이스에서 데이터를 가져옵니다. – miltonjbradley

+0

로리,이 답변은 매우 철저하고 많은 감사합니다. 시간을 내 주셔서 감사합니다. 이것은 크게 도움이 될 것입니다. – miltonjbradley

0

당신이 쓸 수있는 JSON 친화적 인 구조를 만드는 것이 주요 목표 인 경우, 중첩 된 사전을 사용하거나 요소의 순서가 중요하면 OrderedDict을 사용하십시오.그것은 단순한 것을 유지하고, json으로 그것을 작성하는 것은 사소할 것이다. 각 사전에는 키 members (직접 할당 된 목록 또는 하위 집합) 키와 서브 사전 목록 또는 사전 subgroups 키가있을 수 있습니다. 상위 그룹의 제목이 하위 그룹의 접두사이므로 만들기가 어렵지 않습니다.

관련 문제