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