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

Python - แปลงลิสต์ของลิสต์เป็น dictionary แบบต้นไม้


ได้รับ nested list เราต้องการแปลงเป็น dictionary ที่องค์ประกอบของมันสามารถถือเป็นส่วนหนึ่งของโครงสร้างข้อมูลต้นไม้ (tree) ในบทความนี้เราจะดู 2 วิธีในการแปลง nested list เป็น dictionary ที่องค์ประกอบแสดงโครงสร้างแบบต้นไม้

การใช้ Slicing

เรากลับลำดับรายการในลิสต์โดย slicing แล้วตรวจสอบว่ารายการอยู่ในลิสต์หรือไม่ ถ้าไม่ได้อยู่เราข้ามไป ถ้าอยู่เราเพิ่มเข้าไปใน tree

ตัวอย่าง

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 และ operator เพื่อได้ฟังก์ชัน reduce และ getitem โดยใช้ฟังก์ชันเหล่านี้เรากำหนดสองฟังก์ชันเพื่อดึงรายการจากลิสต์และตั้งค่ารายการเข้าไปในโครงสร้างต้นไม้ ที่นี่เรายังใช้วิธี slicing เพื่อกลับลำดับองค์ประกอบของลิสต์แล้วนำฟังก์ชันสองตัวที่สร้างไปใช้สร้าง dictionary ที่องค์ประกอบเป็นโครงสร้างต้นไม้

ตัวอย่าง

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