Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - แปลงรายการเป็น dict . แบบต้นไม้


จากรายการที่ซ้อนกันเราต้องการแปลงเป็นพจนานุกรมที่มีองค์ประกอบที่ถือได้ว่าเป็นส่วนหนึ่งของโครงสร้างข้อมูลแบบทรี ในบทความนี้ เราจะเห็นวิธีการสองวิธีในการแปลงรายการที่ซ้อนกันเป็นการเพิ่มพจนานุกรมซึ่งมีองค์ประกอบที่แสดงถึงโครงสร้างข้อมูลแบบต้นไม้

การใช้สไลซ์

เราย้อนกลับรายการในรายการโดยการหั่นแล้วตรวจสอบว่ามีรายการอยู่ในรายการหรือไม่ หากไม่มีอยู่ เราจะเพิกเฉยต่อสิ่งอื่น เราจะเพิ่มมันไปที่ต้นไม้

ตัวอย่าง

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': {}}}}