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