दिए गए नेस्टेड सूची को हम एक डिक्शनरी में बदलना चाहते हैं जिसके तत्वों को ट्री डेटा संरचना के भाग के रूप में माना जा सके। इस लेख में हम नेस्टेड सूची को ट्री जैसी डेटा संरचना वाले डिक्शनरी में बदलने के दो दृष्टिकोण देखेंगे।
स्लाइसिंग का उपयोग करके
हम सूची में आइटम्स को स्लाइसिंग द्वारा उलटते हैं और फिर जांचते हैं कि आइटम सूची में मौजूद है या नहीं। यदि मौजूद नहीं है तो हम इसे अनदेखा करते हैं अन्यथा हम इसे ट्री में जोड़ते हैं।
उदाहरण
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
# दी गई सूची
listA = [['X'], ['Y', 'X'], ['Z', 'X'], ['P', 'Z', 'X']]
print(CreateTree(listA))
उपरोक्त कोड चलाने से हमें निम्न परिणाम मिलता है:
आउटपुट
{'X': {'Y': {}, 'Z': {'P': {}}}}
reduce और getitem का उपयोग करके
हम functools और operator मॉड्यूल से reduce और getitem फ़ंक्शन्स प्राप्त करते हैं। इन फ़ंक्शन्स का उपयोग करके हम सूची से आइटम्स प्राप्त करने और उन्हें ट्री संरचना में सेट करने के लिए दो फ़ंक्शन्स परिभाषित करते हैं। यहां भी हम सूची के तत्वों को उलटने के लिए स्लाइसिंग दृष्टिकोण का उपयोग करते हैं और फिर ट्री संरचना वाले डिक्शनरी बनाने के लिए दो बनाए गए फ़ंक्शन्स लागू करते हैं।
उदाहरण
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()
# दी गई सूची
lst = [['X'], ['Y', 'X'], ['Z', 'X'], ['P', 'Z', 'X']]
tree = {}
for i in lst:
setTree(tree, i[::-1])
print(tree)
उपरोक्त कोड चलाने से हमें निम्न परिणाम मिलता है:
आउटपुट
{'X': {'Y': {}, 'Z': {'P': {}}}}
व्याख्या:
इनपुट सूची पथों को दर्शाती है:
['X']→ रूट X['Y', 'X']→ X का बच्चा Y['Z', 'X']→ X का बच्चा Z['P', 'Z', 'X']→ X → Z → P
परिणामी ट्री: X के दो बच्चे Y और Z हैं, और Z का बच्चा P है।