จากรายการที่ซ้อนกันเราต้องการแปลงเป็นพจนานุกรมที่มีองค์ประกอบที่ถือได้ว่าเป็นส่วนหนึ่งของโครงสร้างข้อมูลแบบทรี ในบทความนี้ เราจะเห็นวิธีการสองวิธีในการแปลงรายการที่ซ้อนกันเป็นการเพิ่มพจนานุกรมซึ่งมีองค์ประกอบที่แสดงถึงโครงสร้างข้อมูลแบบต้นไม้
การใช้สไลซ์
เราย้อนกลับรายการในรายการโดยการหั่นแล้วตรวจสอบว่ามีรายการอยู่ในรายการหรือไม่ หากไม่มีอยู่ เราจะเพิกเฉยต่อสิ่งอื่น เราจะเพิ่มมันไปที่ต้นไม้
ตัวอย่าง
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': {}}}} การใช้ reduce และ getitem
เราใช้ functools และโมดูลตัวดำเนินการเพื่อลดฟังก์ชันและรับไอเท็ม การใช้ฟังก์ชันเหล่านี้ เรากำหนดสองฟังก์ชันเพื่อรับไอเท็มจากรายการ และตั้งค่าไอเท็มเป็นโครงสร้างแบบทรี นอกจากนี้ เรายังใช้วิธีการแบ่งส่วนเพื่อย้อนกลับองค์ประกอบของรายการ จากนั้นใช้ฟังก์ชันที่สร้างขึ้นทั้งสองเพื่อสร้างพจนานุกรมที่มีองค์ประกอบอยู่ในโครงสร้างแบบต้นไม้
ตัวอย่าง
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': {}}}}