중첩 목록이 주어지면 요소가 트리 데이터 구조의 일부로 간주될 수 있는 사전으로 변환하려고 합니다. 이 기사에서는 데이터 구조와 같은 트리를 나타내는 요소를 갖는 사전을 추가하기 위해 중첩 목록을 변환하는 두 가지 접근 방식을 볼 것입니다.
슬라이싱 사용
목록의 항목을 슬라이싱하여 뒤집은 다음 항목이 목록에 있는지 확인합니다. 존재하지 않으면 무시하고 트리에 추가합니다.
예시
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': {}}}}