Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन नेस्टेड डिक्शनरी को फ़्लैटेड डिक्शनरी में बदलें?

जैसे-जैसे दुनिया अधिक असंरचित डेटा को अपनाती है, हम डेटा के कई स्वरूपों में आते हैं जहां डेटा संरचना को नेस्टेड 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'
}

  1. पायथन डिक्शनरी को सूची में कैसे बदलें?

    इस उद्देश्य के लिए पायथन के डिक्शनरी वर्ग में तीन विधियाँ हैं। मेथड्स आइटम्स (), कीज़ () और वैल्यूज़ () रिटर्न व्यू ऑब्जेक्ट्स में क्रमशः की-वैल्यू पेयर, कीज़ ओनली और वैल्यूज़ शामिल हैं। इन-बिल्ट लिस्ट मेथड इन व्यू ऑब्जेक्ट्स को लिस्ट ऑब्जेक्ट्स में कनवर्ट करता है। >>> d1 = {name: Ravi, ag

  1. मैं एक पायथन टुपल को शब्दकोश में कैसे परिवर्तित कर सकता हूं?

    dict() फ़ंक्शन का उपयोग करके एक डिक्शनरी ऑब्जेक्ट का निर्माण किया जा सकता है। यह फ़ंक्शन तर्क के रूप में टुपल्स का एक टपल लेता है। प्रत्येक टपल में कुंजी मान युग्म होता है। >>> t=((1,'a'), (2,'b')) >>> dict(t) {1: 'a', 2: 'b'} यदि आप कुंजी और मान की

  1. पायथन में एक स्ट्रिंग को डिक्शनरी में कैसे बदलें?

    हम एक अजगर अभिव्यक्ति के रूप में स्ट्रिंग का मूल्यांकन करने के लिए यहां ast.literal_eval() का उपयोग कर सकते हैं। यह सुरक्षित रूप से एक अभिव्यक्ति नोड या एक पायथन अभिव्यक्ति वाले स्ट्रिंग का मूल्यांकन करता है। प्रदान की गई स्ट्रिंग या नोड में केवल निम्नलिखित पायथन शाब्दिक संरचनाएं शामिल हो सकती हैं:स