Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python - 목록 목록을 나무와 같은 사전으로 변환

<시간/>

중첩 목록이 주어지면 요소가 트리 데이터 구조의 일부로 간주될 수 있는 사전으로 변환하려고 합니다. 이 기사에서는 데이터 구조와 같은 트리를 나타내는 요소를 갖는 사전을 추가하기 위해 중첩 목록을 변환하는 두 가지 접근 방식을 볼 것입니다.

슬라이싱 사용

목록의 항목을 슬라이싱하여 뒤집은 다음 항목이 목록에 있는지 확인합니다. 존재하지 않으면 무시하고 트리에 추가합니다.

예시

def CreateTree(lst):
   new_tree = {}
   for list_item in lst:
      currTree = new_tree

      for key in list_item[::-1]:
         if key not in currTree:
            currTree[key] = {}
         currTree = currTree[key]
      return new_tree
# Given list
listA = [['X'], ['Y', 'X'], ['Z', 'X'], ['P', 'Z', 'X']]
print(CreateTree(listA))

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

출력

{'X': {'Y': {}, 'Z': {'P': {}}}}

감소 및 getitem 사용

우리는 함수 reduce와 getitem을 얻기 위해 functools와 operator 모듈을 사용합니다. 이 함수를 사용하여 목록에서 항목을 가져오고 항목을 트리 구조로 설정하는 두 가지 함수를 정의합니다. 여기에서도 슬라이싱 접근 방식을 사용하여 목록의 요소를 뒤집은 다음 생성된 두 함수를 적용하여 요소가 트리 구조로 된 사전을 만듭니다.

예시

from functools import reduce
from operator import getitem

def getTree(tree, mappings):
   return reduce(getitem, mappings, tree)

def setTree(tree, mappings):
   getTree(tree, mappings[:-1])[mappings[-1]] = dict()

# Given list
lst = [['X'], ['Y', 'X'], ['Z', 'X'], ['P', 'Z', 'X']]
tree = {}
for i in lst:
   setTree(tree, i[::-1])
print(tree)

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

출력

{'X': {'Y': {}, 'Z': {'P': {}}}}