जैसे-जैसे दुनिया अधिक असंरचित डेटा को अपनाती है, हम डेटा के कई स्वरूपों में आते हैं जहां डेटा संरचना को नेस्टेड JSONS की तरह गहराई से नेस्ट किया जा सकता है। पायथन में डेटा को समतल करने के लिए आंतरिक कुंजियों को बाहरी कुंजियों के साथ जोड़कर नेस्टेड डेटा संरचना से निपटने की क्षमता है। इस लेख में हम एक नेस्टेड डिक्शनरी लेंगे और उसे चपटा करेंगे।
पुनरावर्ती दृष्टिकोण का उपयोग करना
इस दृष्टिकोण में हम शब्दकोश में प्रत्येक आइटम को पुनरावर्ती रूप से संसाधित करने के लिए एक फ़ंक्शन डिज़ाइन करते हैं। हम डिक्शनरी पास करते हैं, आउटपुट डिक्शनरी के लिए प्लेस होल्डर डिजाइन करते हैं, पैरामीटर के रूप में की और सेपरेटर। हम इस इंस्टेंस का उपयोग यह जांचने के लिए करते हैं कि अगला आइटम स्वयं एक शब्दकोश है या नहीं और फिर इसे रिकर्सिव कॉल के माध्यम से पास करें यदि यह एक शब्दकोश भी है।
उदाहरण
dictA = { "id": "0001", "name": "hotdog", "image": { "url": "images/0001.jpg", "thumbnail": { "url": "images/thumbnails/0001.jpg", "height,width": "2x4" } } } def dict_flatten(in_dict, dict_out=None, parent_key=None, separator="_"): if dict_out is None: dict_out = {} for k, v in in_dict.items(): k = f"{parent_key}{separator}{k}" if parent_key else k if isinstance(v, dict): dict_flatten(in_dict=v, dict_out=dict_out, parent_key=k) continue dict_out[k] = v return dict_out final_dict = dict_flatten(dictA) print(final_dict)
आउटपुट
उपरोक्त कोड को चलाने से हमें निम्नलिखित परिणाम मिलते हैं -
{ 'id': '0001', 'name': 'hotdog', 'image_url': 'images/0001.jpg', 'image_thumbnail_url': 'images/thumbnails/0001.jpg', 'image_thumbnail_height,width': '2x4' }
चेरीपिकर के साथ
यह एक ऐसा मॉड्यूल है जिसे इनपुट के रूप में डिक्शनरी देकर सीधे इस्तेमाल किया जा सकता है। डिफ़ॉल्ट विभाजक है -.
उदाहरण
from cherrypicker import CherryPicker dictA = { "id": "0001", "name": "hotdog", "image": { "url": "images/0001.jpg", "thumbnail": { "url": "images/thumbnails/0001.jpg", "height,width": "2x4" } } } picker = CherryPicker(dictA) print(picker.flatten().get())
आउटपुट
उपरोक्त कोड को चलाने से हमें निम्नलिखित परिणाम मिलते हैं -
{ 'id': '0001', 'name': 'hotdog', 'image_url': 'images/0001.jpg', 'image_thumbnail_url': 'images/thumbnails/0001.jpg', 'image_thumbnail_height, width': '2x4' }