जैसे-जैसे दुनिया अधिक असंरचित डेटा को अपना रही है, हम डेटा के कई प्रारूपों में आते हैं जहां डेटा संरचना गहरी नेस्टेड हो सकती है जैसे नेस्टेड JSON। पायथन में आंतरिक कुंजियों को बाहरी कुंजियों के साथ जोड़कर नेस्टेड डेटा संरचना से निपटने की क्षमता है। इस लेख में हम एक नेस्टेड डिक्शनरी लेंगे और इसे फ्लैट करेंगे।
पुनरावर्ती दृष्टिकोण का उपयोग करके
इस दृष्टिकोण में हम डिक्शनरी में प्रत्येक आइटम को पुनरावर्ती रूप से संसाधित करने के लिए एक फ़ंक्शन डिज़ाइन करते हैं। हम पैरामीटर के रूप में डिक्शनरी, आउटपुट डिक्शनरी के लिए प्लेसहोल्डर, कुंजी और सेपरेटर पास करते हैं। हम isinstance का उपयोग करके जांचते हैं कि अगला आइटम स्वयं डिक्शनरी है या नहीं और यदि यह डिक्शनरी है तो इसे पुनरावर्ती कॉल के माध्यम से पास करते हैं।
उदाहरण
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'
}
cherrypicker के साथ
यह एक मॉड्यूल है जिसे सीधे डिक्शनरी को इनपुट देकर उपयोग किया जा सकता है। डिफ़ॉल्ट सेपरेटर - है।
उदाहरण
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'
}