ในขณะที่โลกยอมรับข้อมูลที่ไม่มีโครงสร้างมากขึ้น เราพบข้อมูลหลายรูปแบบที่โครงสร้างข้อมูลสามารถซ้อนกันอย่างลึกล้ำเช่น 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' }