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

Python แปลงพจนานุกรมที่ซ้อนกันเป็นพจนานุกรมแบบแบนหรือไม่


ในขณะที่โลกยอมรับข้อมูลที่ไม่มีโครงสร้างมากขึ้น เราพบข้อมูลหลายรูปแบบที่โครงสร้างข้อมูลสามารถซ้อนกันอย่างลึกล้ำเช่น JSONS ที่ซ้อนกัน Python มีความสามารถในการจัดการกับโครงสร้างข้อมูลที่ซ้อนกันโดยเชื่อมระหว่างคีย์ภายในกับคีย์ภายนอกเพื่อทำให้ข้อมูลเรียบ ในบทความนี้ เราจะนำพจนานุกรมที่ซ้อนกันมาและทำให้เรียบ

การใช้วิธีการแบบเรียกซ้ำ

ในแนวทางนี้ เราออกแบบฟังก์ชันเพื่อประมวลผลแต่ละรายการซ้ำในพจนานุกรม เราส่งพจนานุกรม ออกแบบตัวยึดตำแหน่งสำหรับพจนานุกรมผลลัพธ์ คีย์และตัวคั่นเป็นพารามิเตอร์ เราใช้ 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'
}

พร้อมไม้จิ้มเชอร์รี่

นี่คือโมดูลที่สามารถใช้งานได้โดยตรงโดยให้พจนานุกรมเป็นอินพุต ตัวคั่นเริ่มต้นคือ -.

ตัวอย่าง

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