Python – Nested Dictionary

og:image

Python – Nested Dictionary

ชุดข้อมูลชนิดดิกชันนารีที่มีข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) คือการที่มีการเก็บข้อมูลในรูปแบบชุดข้อมูลชนิดดิกชันนารีอยู่แล้ว และยังมีชุดข้อมูลชนิดดิกชันนารีเป็นข้อมูลย่อยซ้อนอยู่ภายใน เพื่อประกอบกันเป็นชุดข้อมูลชนิดดิกชันนารีที่บรรจุข้อมูลทั้งหมดเพียงแค่ตัวเดียว

จากในบทที่แล้วที่ได้พูดถึงการใช้งานชุดข้อมูลชนิดดิกชันนารีโดยใช้ตัวอย่างเป็นชุดข้อมูลของหนังสือเล่มหนึ่ง เราจะยังคงใช้ข้อมูลดังกล่าวในตัวอย่างของบททนี้ โดยจะมีการปรับข้อมูลให้มีรายละเอียดเพิ่มขึ้นสำหรับข้อมูลที่เป็นชื่อของบุคคลทุกชื่อที่มีอยู่ในชุดข้อมูล ให้กลายเป็นชุดข้อมูลชนิดดิกชันนารีแทนที่จะเป็นข้อมูลเดี่ยวเช่นข้อมูลชนิดข้อความ(string) โดยชุดข้อมูลของแต่ละบุคคลจะประกอบด้วยข้อมูลของ ชื่อ(name), วันเกิด(birthday), อีเมลล์(email)

* เนื่องจากข้อมูลอีเมลล์ของผู้แปลและอีเมลล์ผู้วาดภาพประกอบเป็นข้อมูลไม่มีอยู่ในข้อมูลจริงในข้อมูลอ้างอิง จึงขอใช้ข้อมูลตัวอย่างแทนสำหรับเนื้อหาในบทนี้ โดยกำหนดให้

  • ข้อมูลตัวอย่างอีเมลล์ของผู้แปลเป็น “i_am_translator@example.com”
  • ข้อมูลตัวอย่างอีเมลล์ผู้วาดภาพประกอบเป็น “i_am_illustrator@example.com”
heidi
ข้อมูลเดิม

  • ชื่อหนังสือ(name)
  • เลข isbn(isbn)
  • ชื่อผู้แต่ง(author)
  • ชื่อผู้วาดภาพประกอบ(illustrator)
  • ชื่อผู้แปล(translator)
  • น้ำหนัก(weight)
  • ขนาด(size)
  • สำนักพิมพ์(publisher)
  • วันที่จัดพิมพ์(publish_date)
  • จำนวนหน้า(pages)
  • ประเภทหนังสือ(category)
  • ราคา(price)
ข้อมูลใหม่

  • ชื่อหนังสือ(name)
  • เลข isbn(isbn)
  • ข้อมูลผู้แต่ง(author)
    • ชื่อ(name)
    • วันเกิด(birthday)
    • อีเมลล์(email)
  • ข้อมูลผู้วาดภาพประกอบ(illustrator)
    • ชื่อ(name)
    • วันเกิด(birthday)
    • อีเมลล์(email)
  • ข้อมูลผู้แปล(translator)
    • ชื่อ(name)
    • วันเกิด(birthday)
    • อีเมลล์(email)
  • น้ำหนัก(weight)
  • ขนาด(size)
  • สำนักพิมพ์(publisher)
  • วันที่จัดพิมพ์(publish_date)
  • จำนวนหน้า(pages)
  • ประเภทหนังสือ(category)
  • ราคา(price)

ตัวอย่างการใช้งาน

# -*- coding: utf-8 -*-
import json

# สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
def print_dictionary(data):
	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
	print( json.dumps( data, indent=4, ensure_ascii=False ) )

# กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
# เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
# เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), ชุดข้อมูลของผู้แปล(translator), 
# ชุดข้อมูลผู้วาดภาพประกอบ(illustrator), น้ำหนัก(weight),  
# ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
# จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
book_detail = { "name": "ไฮดี้(Heidi)",
                "isbn": 9786160436651,
                "author": { 
                            "name" : "Johanna Spyri", 
                            "birthday" : "12 มิถุนายน 2370",
                            "email" : '-' 
                          },
                "translator": { 
                                "name" : "วันเพ็ญ บงกชสถิตย์",
                                "birthday" : "-",
                                "email" : "i_am_translator@example.com" 
                               },
                "illustrator": { 
                                 "name" : "พิมพ์ศศิธร ออสติ",
                                 "birthday" : "-",
                                 "email" : "i_am_illustrator@example.com" 
                               },
                "weight": "0.201 KG",
                "size": "12.7 × 18.4 × 1.45",
                "publisher": "นานมีบุ๊คส์",
                "publish_year": 2561,
                "pages": 266,
                "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                "price": 220
             }

# ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
print_dictionary( book_detail )
# โปรแกรมทำการปรินต์ค่า
# {
#     "name": "ไฮดี้(Heidi)",
#     "isbn": 9786160436651,
#     "author": {
#         "name": "Johanna Spyri",
#         "birthday": "12 มิถุนายน 2370",
#         "email": "-"
#     },
#     "translator": {
#         "name": "วันเพ็ญ บงกชสถิตย์",
#         "birthday": "-",
#         "email": "i_am_translator@example.com"
#     },
#     "illustrator": {
#         "name": "พิมพ์ศศิธร ออสติ",
#         "birthday": "-",
#         "email": "i_am_illustrator@example.com"
#     },
#     "weight": "0.201 KG",
#     "size": "12.7 × 18.4 × 1.45",
#     "publisher": "นานมีบุ๊คส์",
#     "publish_year": 2561,
#     "pages": 266,
#     "category": [
#         "วรรณกรรม",
#         "วรรณกรรมเยาวชน"
#     ],
#     "price": 220
# }

โดยจากตัวอย่าง จะเป็นชุดข้อมูลชนิดดิกชันนารีของข้อมูลหนังสือที่ถูกเก็บไว้ในตัวแปร “book_detail” โดยภายในชุดข้อมูลชนิดดิกชันนารีดังกล่าว บางข้อมูลจะเป็นชุดข้อมูลชนิดดิกชันนารีย่อยๆ อีกชั้นหนึ่ง ในตัวอย่างนี้จะเป็นข้อมูลย่อยดังกล่าวจะเป็นข้อมูลของบุคคลซึ่งมีส่วนเกี่ยวข้องกับหนังสือเล่มนี้ เช่น ข้อมูลผู้แต่ง(author), ผู้แปล(translator)และ ผู้วาดภาพประกอบ(illustrator) โดยชุดข้อมูลชนิดดิกชันนารีย่อยนี้จะเก็บข้อมูลรายละเอียดของแต่ละบุคคลซึ่งจะประกอบด้วยชื่อ(name), วันเกิด(birthday) และ อีเมลล์(email)

  1. การสร้างชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary)
    การสร้างชุดข้อมูลชนิดดิกชันนารีย่อยภายในชุดข้อมูลชนิดดิกชันนารีเดิมนั้น ใช้หลักการเดียวกับการสร้างชุดข้อมูลชนิดดิกชันนารี โดยเราเริ่มทำการระบุชื่ออ้างอิง(key)สำหรับข้อมูลก่อน แล้วจึงทำการกำหนดค่าข้อมูล(value) แต่แทนที่จะใช้ข้อมูลเดี่ยวเช่นข้อมูลชนิดข้อความ, เลขจำนวนเต็ม, เลขทศนิยม หรือข้อมูลอื่นๆ เราก็กำหนดข้อมูลดังกล่าวเป็นชุดข้อมูลชนิดดิกชันนารีแทน โดยจะทำการระบุขอบเขตของข้อมูลด้วยเครื่องหมาย “{}” แล้วคั่นข้อมูลแต่ละตัวด้วยเครื่องหมาย “,”
    ตัวอย่างการใช้งาน

    # -*- coding: utf-8 -*-
    import json
    
    # สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
    def print_dictionary(data):
    	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
    	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
    	print( json.dumps( data, indent=4, ensure_ascii=False ) )
    
    # กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
    # เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
    # เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), ชุดข้อมูลของผู้แปล(translator), 
    # ชุดข้อมูลผู้วาดภาพประกอบ(illustrator), น้ำหนัก(weight),  
    # ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
    # จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
    book_detail = { "name": "ไฮดี้(Heidi)",
                    "isbn": 9786160436651,
                    "author": { 
                                "name" : "Johanna Spyri", 
                                "birthday" : "12 มิถุนายน 2370",
                                "email" : '-' 
                              },
                    "translator": { 
                                    "name" : "วันเพ็ญ บงกชสถิตย์",
                                    "birthday" : "-",
                                    "email" : "i_am_translator@example.com" 
                                   },
                    "illustrator": { 
                                     "name" : "พิมพ์ศศิธร ออสติ",
                                     "birthday" : "-",
                                     "email" : "i_am_illustrator@example.com" 
                                   },
                    "weight": "0.201 KG",
                    "size": "12.7 × 18.4 × 1.45",
                    "publisher": "นานมีบุ๊คส์",
                    "publish_year": 2561,
                    "pages": 266,
                    "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                    "price": 220
                 }
    
    # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
    print_dictionary( book_detail )
    # โปรแกรมทำการปรินต์ค่า
    # {
    #     "name": "ไฮดี้(Heidi)",
    #     "isbn": 9786160436651,
    #     "author": {
    #         "name": "Johanna Spyri",
    #         "birthday": "12 มิถุนายน 2370",
    #         "email": "-"
    #     },
    #     "translator": {
    #         "name": "วันเพ็ญ บงกชสถิตย์",
    #         "birthday": "-",
    #         "email": "i_am_translator@example.com"
    #     },
    #     "illustrator": {
    #         "name": "พิมพ์ศศิธร ออสติ",
    #         "birthday": "-",
    #         "email": "i_am_illustrator@example.com"
    #     },
    #     "weight": "0.201 KG",
    #     "size": "12.7 × 18.4 × 1.45",
    #     "publisher": "นานมีบุ๊คส์",
    #     "publish_year": 2561,
    #     "pages": 266,
    #     "category": [
    #         "วรรณกรรม",
    #         "วรรณกรรมเยาวชน"
    #     ],
    #     "price": 220
    # }
    
    

    จากตัวอย่างเป็นการสร้างชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) โดยจากตัวอย่างเป็นชุดข้อมูลชนิดดิกชันนารีที่เก็บข้อมูลของหนังสือเล่มหนึ่ง และมีชุดข้อมูลชนิดดิกชันนารีย่อยซ้อนอยู่ภายในซึ่งทำการเก็บข้อมูลของผู้แต่ง(author), ผู้แปล(translator) และ ผู้วาดภาพประกอบ(illustrator) โดยสำหรับชุดข้อมูลย่อยทั้ง 3 นี้ แทนที่จะมีข้อมูลเดี่ยวที่เก็บเฉพาะชื่อของบุคคลก็ปรับปรุงให้มีการเก็บข้อมูลทั้งชื่อบุคคล(name), วันเกิด(birthday) และ อีเมลล์(email) เพิ่มเติมด้วย

  2. การเข้าถึงชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary)
    การเข้าถึงชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) นั้น คล้ายคลึงกับการเข้าถึงชุดข้อมูลชนิดดิกชันนารีแบบทั่วไป โดยเราจะใช้เครื่องหมาย “[]” แล้วระบุชื่ออ้างอิง(key)ในการเข้าถึงข้อมูล แต่เนื่องจากมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายในด้วย ดังนั้นเมื่อทำการเข้าถึงข้อมูลที่ไม่ได้อยู่ชั้นนอกสุดเราจำเป็นต้องอ้างอิงข้อมูล เริ่มตั้งแต่ชุดข้อมูลชนิดดิกชันนารีชั้นนอกสุด แล้วก็ชั้นย่อยๆ ตามระดับของการเก็บข้อมูลไปเป็นลำดับ
    ตัวอย่างการใช้งาน

    # -*- coding: utf-8 -*-
    import json
    
    # สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
    def print_dictionary(data):
    	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
    	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
    	print( json.dumps( data, indent=4, ensure_ascii=False ) )
    
    # กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
    # เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
    # เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), ชุดข้อมูลของผู้แปล(translator), 
    # ชุดข้อมูลผู้วาดภาพประกอบ(illustrator), น้ำหนัก(weight),  
    # ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
    # จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
    book_detail = { "name": "ไฮดี้(Heidi)",
                    "isbn": 9786160436651,
                    "author": { 
                                "name" : "Johanna Spyri", 
                                "birthday" : "12 มิถุนายน 2370",
                                "email" : '-' 
                              },
                    "translator": { 
                                    "name" : "วันเพ็ญ บงกชสถิตย์",
                                    "birthday" : "-",
                                    "email" : "i_am_translator@example.com" 
                                   },
                    "illustrator": { 
                                     "name" : "พิมพ์ศศิธร ออสติ",
                                     "birthday" : "-",
                                     "email" : "i_am_illustrator@example.com" 
                                   },
                    "weight": "0.201 KG",
                    "size": "12.7 × 18.4 × 1.45",
                    "publisher": "นานมีบุ๊คส์",
                    "publish_year": 2561,
                    "pages": 266,
                    "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                    "price": 220
                 }
    
    # ทำการเข้าถึงข้อมูลเกี่ยวกับผู้แต่ง ซึ่งเป็นชุดข้อมูลหนึ่งที่ถูกเก็บอยู่ชั้นนอกสุด
    author_info = book_detail["author"] 
    
    # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
    print_dictionary( author_info )
    # โปรแกรมทำการปรินต์ค่า
    # {
    #    "name": "Johanna Spyri",
    #    "birthday": "12 มิถุนายน 2370",
    #    "email": "-"
    # }
    
    # ทำการเข้าถึงข้อมูลเกี่ยวกับชื่อผู้แต่ง ซึ่งเป็นชุดข้อมูลที่ถูกเก็บอยู่ชั้นข้อมูลย่อย 
    # จึงจำเป็นต้องทำการอ้างถึงข้อมูล เริ่มตั้งแต่ชั้นนอกสุดคือ ชุดข้อมูลของผู้แต่งหนังสือ
    # แล้วจึงเข้าถึงข้อมูลของชื่อผู้แต่ง ซึ่งเป็นข้อมูลย่อยของข้อมูลเกี่ยวกับผู้แต่งอีกครั้งหนึ่ง
    author_name = book_detail["author"]["name"]
    
    # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
    print( author_name )
    # โปรแกรมทำการปรินต์ค่า
    # Johanna Spyri
    
    # ทำการเข้าถึงข้อมูลเกี่ยวกับวันเกิดของผู้แต่ง ซึ่งเป็นชุดข้อมูลที่ถูกเก็บอยู่ชั้นข้อมูลย่อย 
    # จึงจำเป็นต้องทำการอ้างถึงข้อมูล เริ่มตั้งแต่ชั้นนอกสุดคือ ข้อมูลเกี่ยวกับผู้แต่ง แล้วจึงเข้าถึง
    # ข้อมูลวันเกิดของผู้แต่ง ซึ่งเป็นข้อมูลย่อยของข้อมูลเกี่ยวกับผู้แต่งอีกครั้งหนึ่ง
    author_birthday = book_detail["author"]["birthday"]
    
    # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
    print( author_birthday )
    # โปรแกรมทำการปรินต์ค่า
    # 12 มิถุนายน 2370
    
    

    จากตัวอย่างเราเข้าถึงข้อมูลในชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) โดยต้องการเข้าถึงชุดข้อมูลชนิดดิกชันนารีที่ซ้อนอยู่ภายในซึ่งเป็นข้อมูลของชื่อผู้แต่ง(name) และ วันเกิด(brithday) ซึ่งข้อมูลดังกล่าวนั้นเป็นข้อมูลย่อยที่ถูกเก็บอยู่ภายในข้อมูลเกี่ยวกับผู้แต่ง(author)อีกชั้นหนึ่ง

    • การเพิ่มชุดข้อมูลชนิดดิกชันนารีใหม่ลงไปในชุดข้อมูลชนิดดิกชันนารี(nested dictionary)
      ในการเพิ่มข้อมูลใหม่สามารถทำได้โดยอ้างอิงถึงข้อมูลภายในที่ต้องการ(หากมีระดับย่อยก็จำเป็นต้องอ้างอิงข้อมูลตังแต่ระดับนอกสุดถึงระดับย่อยดังกล่าว) แล้วใช้เครื่องหมาย “=” ในการกำหนดค่าด้วยข้อมูลทางด้านขวาของเครื่องหมาย หากข้อมูลของคุณลักษณะดังกล่าวยังไม่มีอยู่ คุณลักษณะดังกล่าวจะถูกเพิ่มเข้าไปในระบบด้วยค่าที่ระบุ แต่หากข้อมูลของคุณลักษณะดังกล่าวมีอยู่แล้วในชุดข้อมูล ข้อมูลนั้นก็จะถูกทำการแก้ไขด้วยค่าที่ระบุ

    • การเพิ่มชุดข้อมูลชนิดดิกชันนารีย่อย ลงไปในชุดข้อมูลชนิดดิกชันนารี(nested dictionary) โดยการเพิ่มคุณลักษณะของข้อมูลย่อยที่ละตัว
      ตัวอย่างการใช้งาน

      # -*- coding: utf-8 -*-
      import json
      
      # สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
      def print_dictionary(data):
      	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
      	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
      	print( json.dumps( data, indent=4, ensure_ascii=False ) )
      
      # กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
      # เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
      # เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), 
      # ชุดข้อมูลของผู้แปล(translator), น้ำหนัก(weight),  
      # ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
      # จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
      book_detail = { "name": "ไฮดี้(Heidi)",
                      "isbn": 9786160436651,
                      "author": { 
                                  "name" : "Johanna Spyri", 
                                  "birthday" : "12 มิถุนายน 2370",
                                  "email" : '-' 
                                },
                      "translator": { 
                                      "name" : "วันเพ็ญ บงกชสถิตย์",
                                      "birthday" : "-",
                                      "email" : "i_am_translator@example.com" 
                                     },
                      "weight": "0.201 KG",
                      "size": "12.7 × 18.4 × 1.45",
                      "publisher": "นานมีบุ๊คส์",
                      "publish_year": 2561,
                      "pages": 266,
                      "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                      "price": 220
                   }
      
      # ทำการเพิ่มข้อมูลเกี่ยวกับผู้วาดภาพประกอบ(illustrator) เข้าไปในข้อมูลเกี่ยวกับ
      # หนังสือเล่มหนึ่ง โดยข้อมูลของผู้วาดภาพประกอบนั้นจะประกอบด้วย 
      # ชื่อ(name), วันเกิด(birthday) และ อีเมลล์(email)
      # โดยข้อมูลดังกล่าวจะถูกเพิ่มเข้าไปในชุดข้อมูลเกี่ยวกับผู้วาดภาพประกอบทีละข้อมูลตามลำดับ
      book_detail['illustrator'] = { }
      book_detail['illustrator']['name'] = "พิมพ์ศศิธร ออสติ"
      book_detail['illustrator']['birthday'] = "-"
      book_detail['illustrator']['email'] = "i_am_illustrator@example.com"
      
      # ทำการเข้าถึงข้อมูลเกี่ยวกับผู้วาดภาพระกอบ ซึ่งเป็นข้อมูลของหนังสือที่ถูกเก็บอยู่ชั้นนอกสุด
      illustrator_info = book_detail['illustrator']
      
      # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
      print_dictionary( illustrator_info )
      # โปรแกรมทำการปรินต์ค่า
      # { 
      #   "name": "พิมพ์ศศิธร ออสติ",
      #   "birthday": "-",
      #   "email": "i_am_illustrator@example.com" 
      # }
      
      # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
      print_dictionary( book_detail )
      # โปรแกรมทำการปรินต์ค่า
      # book_detail = { "name": "ไฮดี้(Heidi)",
      #                "isbn": 9786160436651,
      #                "author": { 
      #                            "name": "Johanna Spyri", 
      #                            "birthday": "12 มิถุนายน 2370",
      #                            "email": '-' 
      #                          },
      #                "translator": { 
      #                                "name": "วันเพ็ญ บงกชสถิตย์",
      #                                "birthday": "-",
      #                                "email": "i_am_translator@example.com" 
      #                               },
      #                "weight": "0.201 KG",
      #                "size": "12.7 × 18.4 × 1.45",
      #                "publisher": "นานมีบุ๊คส์",
      #                "publish_year": 2561,
      #                "pages": 266,
      #                "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
      #                "price": 220,
      #                "illustrator": { 
      #                                 "name": "พิมพ์ศศิธร ออสติ",
      #                                 "birthday": "-",
      #                                 "email": "i_am_illustrator@example.com" 
      #                               }
      #}
      
      

      จากตัวอย่าง เราได้ทำการเพิ่มข้อมูลย่อยซึ่งเป็นชุดข้อมูลชนิดดิกชันนารีข้อมูลหนึ่งซึ่งเก็บข้อมูลของผู้วาดภาพประกอบ โดยเพิ่มเข้าไปในชุดข้อมูลชนิดดิกชันนารีเดิมที่มีอยู่แล้วซึ่งทำการเก็บข้อมูลเกี่ยวกับหนังสือเล่มหนึ่ง
      ในการเพิ่มข้อมูลใหม่ สามารถทำได้โดยอ้างอิงถึงข้อมูลภายในที่ต้องการ(หากเป็นระดับย่อยก็จำเป็นต้องอ้างอิงข้อมูลตังแต่ระดับนอกสุดถึงระดับย่อยดังกล่าว) แล้วใช้เครื่องหมาย “=” ในการกำหนดค่า ด้วยข้อมูลทางด้านขวาของเครื่องหมาย
      หากข้อมูลของคุณลักษณะดังกล่าวยังไม่มีอยู่ คุณลักษณะดังกล่าวจะถูกเพิ่มเข้าไปในชุดข้อมูลด้วยข้อมูลที่ระบุ แต่หากข้อมูลของคุณลักษณะดังกล่าวมีอยู่แล้ว ข้อมูลดังกล่าวก็จะถูกทำการแก้ไขด้วยข้อมูลที่ระบุ
      โดยในตัวอย่างจะเริ่มจากการเพิ่มชุดข้อมูลชนิดดิกชันนารีที่ยังไม่ระบุข้อมูลใดๆ เพียงแต่กำหนดไว้ว่า ด้วยชื่ออ้างอิงดังกล่าวต้องการจะเก็บข้อมูลเกี่ยวกับผู้วาดภาพประกอบ(illustrator) จากนั้นจึงค่อยๆ ทำการเพิ่มข้อมูลเกี่ยวกับผู้วาดภาพภาพประกอบเข้าไปในชุดข้อมูลนี้ ซึ่งข้อมูลจะประกอบด้วยชื่อ(name), วันเกิด(birthday) และ อีเมลล์(email)

    • การเพิ่มชุดข้อมูลดิกชันนารีย่อย ลงไปในชุดข้อมูลชนิดดิกชันนารี(nested dictionary) โดยการระบุชุดข้อมูลชนิดดิกชันนารีย่อยพร้อมกันทั้งหมด
      ตัวอย่างการใช้งาน

      # -*- coding: utf-8 -*-
      import json
      
      # สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
      def print_dictionary(data):
      	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
      	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
      	print( json.dumps( data, indent=4, ensure_ascii=False ) )
      
      # กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
      # เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
      # เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), 
      # ชุดข้อมูลของผู้แปล(translator), น้ำหนัก(weight),  
      # ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
      # จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
      book_detail = { "name": "ไฮดี้(Heidi)",
                      "isbn": 9786160436651,
                      "author": { 
                                  "name" : "Johanna Spyri", 
                                  "birthday" : "12 มิถุนายน 2370",
                                  "email" : '-' 
                                },
                      "translator": { 
                                      "name" : "วันเพ็ญ บงกชสถิตย์",
                                      "birthday" : "-",
                                      "email" : "i_am_translator@example.com" 
                                     },
                      "weight": "0.201 KG",
                      "size": "12.7 × 18.4 × 1.45",
                      "publisher": "นานมีบุ๊คส์",
                      "publish_year": 2561,
                      "pages": 266,
                      "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                      "price": 220
                   }
      
      # ทำการระบุชุดข้อมูลชนิดดิกชันนารี ซึ่งเป็นข้อมูลเกี่ยวกับผู้วาดภาพประกอบ
      illustrator_info = { "name": "พิมพ์ศศิธร ออสติ",
                                     "birthday": "-",
                                     "email": "i_am_illustrator@example.com" }
      
      # ทำการเพิ่มข้อมูลเกี่ยวกับผู้วาดภาพประกอบเข้าไปในข้อมูลของหนังสือเล่มหนึ่ง
      book_detail["illustrator"] = illustrator_info
      
      # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
      print_dictionary( book_detail['illustrator'] )
      # โปรแกรมทำการปรินต์ค่า
      # { 
      #   "name": "พิมพ์ศศิธร ออสติ",
      #   "birthday": "-",
      #   "email": "i_am_illustrator@example.com" 
      # }
      
      # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
      print_dictionary( book_detail )
      # โปรแกรมทำการปรินต์ค่า
      # {
      #     "name": "ไฮดี้(Heidi)",
      #     "isbn": 9786160436651,
      #     "author": {
      #         "name": "Johanna Spyri",
      #         "birthday": "12 มิถุนายน 2370",
      #         "email": "-"
      #     },
      #     "translator": {
      #         "name": "วันเพ็ญ บงกชสถิตย์",
      #         "birthday": "-",
      #         "email": "i_am_translator@example.com"
      #     },
      #     "weight": "0.201 KG",
      #     "size": "12.7 × 18.4 × 1.45",
      #     "publisher": "นานมีบุ๊คส์",
      #     "publish_year": 2561,
      #     "pages": 266,
      #     "category": [
      #         "วรรณกรรม",
      #         "วรรณกรรมเยาวชน"
      #     ],
      #     "price": 220,
      #     "illustrator": {
      #         "name": "พิมพ์ศศิธร ออสติ",
      #         "birthday": "-",
      #         "email": "i_am_illustrator@example.com"
      #     }
      # }
      
      

      จากตัวอย่าง เราได้ทำการเพิ่มชุดข้อมูลชนิดดิกชันนารีข้อมูลหนึ่งซึ่งจะเก็บข้อมูลของผู้วาดภาพประกอบ โดยเพิ่มข้อมูลเข้าไปในชุดข้อมูลชนิดดิกชันนารีเดิมที่มีอยู่แล้วและเก็บข้อมูลเกี่ยวกับหนังสือเล่มหนึ่ง ในการเพิ่มข้อมูลใหม่สามารถทำได้โดยอ้างอิงถึงข้อมูลภายในที่ต้องการ(หากมีระดับของข้อมูลย่อย ก็จำเป็นต้องอ้างอิงข้อมูลตังแต่ระดับนอกสุดถึงระดับย่อยดังกล่าว) แล้วใช้เครื่องหมาย “=” ในการกำหนดค่าด้วยข้อมูลทางด้านขวาของเครื่องหมาย
      โดยในตัวอย่างจะเริ่มจาก การสร้างชุดข้อมูลชนิดดิกชันนารีที่เก็บชุดข้อมูลของผู้วาดภาพประกอบซึ่งประกอบด้วยข้อมูล ชื่อ(name), วันเกิด(birthday) และ อีเมลล์(email)ไว้ก่อน แล้วจึงค่อยทำการเพิ่มชุดข้อมูลเกี่ยวกับผู้วาดภาพประกอบดังกล่าวเข้าไปในข้อมูลของหนังสือเล่มหนึ่งซึ่งก็ถูกเก็บไว้แล้วในรูปแบบชุดข้อมูลชนิดดิกชันนารีเช่นกัน

  3. การแก้ไขชุดข้อมูลชนิดดิกชันนารีที่เป็นข้อมูลย่อยซึ่งถูกเก็บอยู่ในชุดข้อมูลชนิดดิกชันนารี(nested dictionary)
    การแก้ไข้ข้อมูลภายในชุดข้อมูลชนิดดิกชันนารีย่อยซึ่งซ้อนอยู่ภายในชุดข้อมูลชนิดดิกชันนารีนั้น ทำได้ด้วยการอ้างถึงข้อมูลดังกล่าวโดยอ้างอิงตั้งแต่ข้อมูลชั้นนอกสุดจนถึงข้อมูลย่อยภายในที่ต้องการ แล้วจึงกำหนดข้อมูลด้วยเครื่องหมาย “=” แล้วทำการกำหนดค่าด้วยชุดข้อมูลจากทางด้านขวาของเครื่องหมายดังกล่าว
    ตัวอย่างการใช้งาน

    # -*- coding: utf-8 -*-
    import json
    
    # สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
    def print_dictionary(data):
    	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
    	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
    	print( json.dumps( data, indent=4, ensure_ascii=False ) )
    
    # กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
    # เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
    # เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), 
    # ชุดข้อมูลของผู้วาดภาพประกอบ(illustrator), 
    # ชุดข้อมูลของผู้แปล(translator), น้ำหนัก(weight),  
    # ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
    # จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
    book_detail = { "name": "ไฮดี้(Heidi)",
                    "isbn": 9786160436651,
                    "author": { 
                                "name" : "Johanna Spyri", 
                                "birthday" : "12 มิถุนายน 2370",
                                "email" : '-' 
                              },
                    "illustrator": { 
                                      "name": "พิมพ์ศศิธร ออสติ",
                                      "birthday": "-",
                                      "email": "-" }
                    "translator": { 
                                    "name" : "วันเพ็ญ บงกชสถิตย์",
                                    "birthday" : "-",
                                    "email" : "-" 
                                   },
                    "weight": "0.201 KG",
                    "size": "12.7 × 18.4 × 1.45",
                    "publisher": "นานมีบุ๊คส์",
                    "publish_year": 2561,
                    "pages": 266,
                    "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                    "price": 220
                 }
    
    # ทำการแก้ไขข้อมูลอีเมลล์ของผู้วาดภาพประกอบ
    book_detail["illustrator"]["email"]  = "i_am_illustrator@example.com"
    
    # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
    print_dictionary( book_detail['illustrator'] )
    # โปรแกรมทำการปรินต์ค่า
    # { 
    #   "name": "พิมพ์ศศิธร ออสติ",
    #   "birthday": "-",
    #   "email": "i_am_illustrator@example.com" 
    # }
    
    # ทำการแก้ไขข้อมูลอีเมลล์ของผู้แปล
    book_detail["translator"]["email"]  = "i_am_translator@example.com"
    
    # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
    print_dictionary( book_detail['translator'] )
    # โปรแกรมทำการปรินต์ค่า
    # { 
    #   "name": "วันเพ็ญ บงกชสถิตย์",
    #   "birthday": "-",
    #   "email": "i_am_translator@example.com" 
    # }
    
    # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
    print_dictionary( book_detail )
    # โปรแกรมทำการปรินต์ค่า
    # {
    #     "name": "ไฮดี้(Heidi)",
    #     "isbn": 9786160436651,
    #     "author": {
    #         "name": "Johanna Spyri",
    #         "birthday": "12 มิถุนายน 2370",
    #         "email": "-"
    #     },
    #     "illustrator": {
    #         "name": "พิมพ์ศศิธร ออสติ",
    #         "birthday": "-",
    #         "email": "i_am_illustrator@example.com"
    #     },
    #     "translator": {
    #         "name": "วันเพ็ญ บงกชสถิตย์",
    #         "birthday": "-",
    #         "email": "i_am_translator@example.com"
    #     },
    #     "weight": "0.201 KG",
    #     "size": "12.7 × 18.4 × 1.45",
    #     "publisher": "นานมีบุ๊คส์",
    #     "publish_year": 2561,
    #     "pages": 266,
    #     "category": [
    #         "วรรณกรรม",
    #         "วรรณกรรมเยาวชน"
    #     ],
    #     "price": 220
    # }
    
    
  4. การลบข้อมูลชนิดดิกชันนารีที่เป็นข้อมูลย่อยอยู่ภายในชุดข้อมูลชนิดดิกชันนารี(nested dictionary)
    • การลบรายละเอียดของชุดข้อมูลชนิดดิกชันนารีที่เป็นข้อมูลย่อยอยู่ภายในชุดข้อมูลชนิดดิกชันนารี โดยลบเพียงคุณลักษณะบางอย่าง ด้วยคีย์เวิร์ด “del”
      เราสามารถทำการลบข้อมูลของชุดข้อมูลชนิดดิกชันนารีที่ซ้อนอยู่ภายในชุดข้อมูลชนิดดิกชันนารี ด้วยคีย์เวิร์ด “del” โดยในการลบข้อมูลย่อยนั้นจำเป็นต้องอ้างอิงตั้งแต่ข้อมูลช้นนอกสุดไปจนถึงชั้นข้อมูลย่อยชั้นที่ต้องการ และเมื่อทำการลบข้อมูลด้วยคีย์เวิร์ดดังกล่าวแล้วจะไม่สามารถเข้าถึงข้อมูลนั้นได้อีก หากทำการเข้าถึงข้อมูลดังกล่าวอาจเกิดข้อผิดพลาด
      ตัวอย่างการใช้งาน

      # -*- coding: utf-8 -*-
      import json
      
      # สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
      def print_dictionary(data):
      	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
      	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
      	print( json.dumps( data, indent=4, ensure_ascii=False ) )
      
      # กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
      # เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
      # เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), ชุดข้อมูลของผู้แปล(translator), 
      # ชุดข้อมูลผู้วาดภาพประกอบ(illustrator), น้ำหนัก(weight),  
      # ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
      # จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
      book_detail = { "name": "ไฮดี้(Heidi)",
                      "isbn": 9786160436651,
                      "author": { 
                                  "name" : "Johanna Spyri", 
                                  "birthday" : "12 มิถุนายน 2370",
                                  "email" : '-' 
                                },
                      "translator": { 
                                      "name" : "วันเพ็ญ บงกชสถิตย์",
                                      "birthday" : "-",
                                      "email" : "i_am_translator@example.com" 
                                     },
                      "illustrator": { 
                                       "name" : "พิมพ์ศศิธร ออสติ",
                                       "birthday" : "-",
                                       "email" : "i_am_illustrator@example.com" 
                                     },
                      "weight": "0.201 KG",
                      "size": "12.7 × 18.4 × 1.45",
                      "publisher": "นานมีบุ๊คส์",
                      "publish_year": 2561,
                      "pages": 266,
                      "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                      "price": 220
                   }
      
      # ทำการลบข้อมูลเกี่ยวกับอีเมลล์ของผู้วาดภาพประกอบ ออกจากชุดข้อมูลของหนังสือ
      # ด้วยคีย์เวิร์ด del
      del book_detail['illustrator']['email']
      
      # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
      print_dictionary( book_detail['illustrator'] )
      # โปรแกรมทำการปรินต์ค่า
      # {
      #    "name": "พิมพ์ศศิธร ออสติ",
      #    "birthday": "-"
      # }
      
      # ทำการลบข้อมูลเกี่ยวกับอีเมลล์ของผู้แปล ออกจากชุดข้อมูลของหนังสือ 
      # ด้วยคีย์เวิร์ด del
      del book_detail['translator']['email']
      
      # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
      print_dictionary( book_detail['translator'] )
      # โปรแกรมทำการปรินต์ค่า
      # {
      #    "name" : "วันเพ็ญ บงกชสถิตย์",
      #    "birthday" : "-"
      # }
      
      # ทำการเข้าถึงข้อมูลเกี่ยวกับอีเมลล์ของผู้แปล ซึ่งเป็นข้อมูลที่ถูกลบไปแล้วด้วยคีย์เวิร์ด "del"
      print( book_detail["translator"]["email"])
      # โปรแกรมทำการปรินต์ค่า
      # KeyError: 'email'
      
      
    • การลบรายละเอียดของชุดข้อมูลชนิดดิกชันนารีที่ซ้อนอยู่ภายในชุดข้อมูลชนิดดิกชันนารี(nested dictionary) โดยลบชุดข้อมูลชนิดดิกชันนารีย่อยทั้งหมดด้วยคีย์เวิร์ด del
      ตัวอย่างการใช้งาน

      # -*- coding: utf-8 -*-
      import json
      
      # สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
      def print_dictionary(data):
      	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
      	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
      	print( json.dumps( data, indent=4, ensure_ascii=False ) )
      
      # กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
      # เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
      # เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), ชุดข้อมูลของผู้แปล(translator), 
      # ชุดข้อมูลผู้วาดภาพประกอบ(illustrator), น้ำหนัก(weight),  
      # ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
      # จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
      book_detail = { "name": "ไฮดี้(Heidi)",
                      "isbn": 9786160436651,
                      "author": { 
                                  "name" : "Johanna Spyri", 
                                  "birthday" : "12 มิถุนายน 2370",
                                  "email" : '-' 
                                },
                      "translator": { 
                                      "name" : "วันเพ็ญ บงกชสถิตย์",
                                      "birthday" : "-",
                                      "email" : "i_am_translator@example.com" 
                                     },
                      "illustrator": { 
                                       "name" : "พิมพ์ศศิธร ออสติ",
                                       "birthday" : "-",
                                       "email" : "i_am_illustrator@example.com" 
                                     },
                      "weight": "0.201 KG",
                      "size": "12.7 × 18.4 × 1.45",
                      "publisher": "นานมีบุ๊คส์",
                      "publish_year": 2561,
                      "pages": 266,
                      "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                      "price": 220
                   }
      
      # ทำการลบชุดข้อมูลเกี่ยวกับผู้วาดภาพประกอบทั้งหมด ออกจากข้อมูลหนังสือด้วยคีย์เวิร์ด "del"
      del book_detail['illustrator']
      
      # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
      print_dictionary( book_detail )
      # โปรแกรมทำการปรินต์ค่า
      # {
      #     "name": "ไฮดี้(Heidi)",
      #     "isbn": 9786160436651,
      #     "author": {
      #         "name": "Johanna Spyri",
      #         "birthday": "12 มิถุนายน 2370",
      #         "email": "-"
      #     },
      #     "translator": {
      #         "name": "วันเพ็ญ บงกชสถิตย์",
      #         "birthday": "-",
      #         "email": "i_am_translator@example.com"
      #     },
      #     "weight": "0.201 KG",
      #     "size": "12.7 × 18.4 × 1.45",
      #     "publisher": "นานมีบุ๊คส์",
      #     "publish_year": 2561,
      #     "pages": 266,
      #     "category": [
      #         "วรรณกรรม",
      #         "วรรณกรรมเยาวชน"
      #     ],
      #     "price": 220
      # }
      
      # ทำการลบชุดข้อมูลเกี่ยวกับผู้แปลทั้งหมดออกจากข้อมูลหนังสือด้วยคีย์เวิร์ด "del"
      del book_detail['translator']
      
      # ทำการปรินต์ค่าชุดข้อมูลชนิดดิกชันนารีโดยใช้ฟังก์ชัน print_dictionary()
      print_dictionary( book_detail )
      # โปรแกรมทำการปรินต์ค่า
      # {
      #     "name": "ไฮดี้(Heidi)",
      #     "isbn": 9786160436651,
      #     "author": {
      #         "name": "Johanna Spyri",
      #         "birthday": "12 มิถุนายน 2370",
      #         "email": "-"
      #     },
      #     "weight": "0.201 KG",
      #     "size": "12.7 × 18.4 × 1.45",
      #     "publisher": "นานมีบุ๊คส์",
      #     "publish_year": 2561,
      #     "pages": 266,
      #     "category": [
      #         "วรรณกรรม",
      #         "วรรณกรรมเยาวชน"
      #     ],
      #     "price": 220
      # }
      
      # ทำการเข้าถึงชุดข้อมูลเกี่ยวกับผู้แปล ซึ่งเป็นชุดข้อมูลที่ถูกลบไปแล้วด้วยคีย์เวิร์ด del
      print( book_detail["translator"])
      # โปรแกรมทำการปรินต์ค่า
      # KeyError: 'translator'
      
      
  5. การวนลูปเพื่อดูค่าข้อมูลภายในชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary)
    เราสามารถใช้ for…loop ในการวนลูปเพื่อดูข้อมูลที่อยู่ภายในชุดข้อมูลชนิดดิกชันนารีที่มีข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary)
    ตัวอย่างการใช้งาน

    # -*- coding: utf-8 -*-
    import json
    
    # สร้างฟังก์ชันสำหรับปรินต์ค่าชุดข้อมูลชนิดดิกชันนารี
    def print_dictionary(data):
    	# ทำการปรินต์ค่า ชุดข้อมูลชนิดดิกชันนารี โดยอาศัยฟังก์ชัน json.dumps() เพื่อให้สามารถ
    	# ปรินท์ค่าข้อความออกมาเป็นภาษาไทยแทนการใช้สัญลักษณ์ ascii ภายใน  console
    	print( json.dumps( data, indent=4, ensure_ascii=False ) )
    
    # กำหนดตัวแปรเพื่อเก็บชุดข้อมูลชนิดดิกชันนารีซึ่งมีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน
    # เพื่อเก็บข้อมูลรายละเอียดของหนังสือเล่มหนึ่ง โดยระบุข้อมูลชื่อหนังสือ(name), 
    # เลขอ้างอิงหนังสือ(isbn), ชุดข้อมูลของผู้แต่ง(author), ชุดข้อมูลของผู้แปล(translator), 
    # ชุดข้อมูลผู้วาดภาพประกอบ(illustrator), น้ำหนัก(weight),  
    # ขนาด(size), สำนักพิมพ์(publisher), ปีที่พิมพ์(publish_year), 
    # จำนวนหน้า(pages), ประเภทของหนังสือ(category), ราคา(price)
    book_detail = { "name": "ไฮดี้(Heidi)",
                    "isbn": 9786160436651,
                    "author": { 
                                "name" : "Johanna Spyri", 
                                "birthday" : "12 มิถุนายน 2370",
                                "email" : '-' 
                              },
                    "translator": { 
                                    "name" : "วันเพ็ญ บงกชสถิตย์",
                                    "birthday" : "-",
                                    "email" : "i_am_translator@example.com" 
                                   },
                    "illustrator": { 
                                     "name" : "พิมพ์ศศิธร ออสติ",
                                     "birthday" : "-",
                                     "email" : "i_am_illustrator@example.com" 
                                   },
                    "weight": "0.201 KG",
                    "size": "12.7 × 18.4 × 1.45",
                    "publisher": "นานมีบุ๊คส์",
                    "publish_year": 2561,
                    "pages": 266,
                    "category": ["วรรณกรรม", "วรรณกรรมเยาวชน"],
                    "price": 220
                 }
    
    # ทำการวนลูปเพื่อเข้าถึงคุณลักษณะข้อมูลเกี่ยวกับหนังสือ สำหรับข้อมูลชั้นนอกสุด
    for obj_key, obj_value in book_detail.items():
    
            # ตรวจสอบว่าข้อมูลดังกล่าวเป็นชุดข้อมูลชนิดดิกชันนารีหรือไม่ 
            # หากเป็นชุดข้อมูลชนิดดิกชันนารี ให้ทำการวนลูปเพื่อทำการเข้าถึงคุณลักษณะย่อย
            # หากไม่เป็นชุดข้อมูลชนิดดิกชันนารี ให้ทำการอ่านค่าข้อมูล(value)จากชื่ออ้างอิง(key)
    	if( type(obj_value) is dict ):
                    # ทำการปรินต์ค่าชื่ออ้างอิงข้อมูล(key)
    		print("key: {}".format( obj_key ) )
    
                    # ทำการวนลูปเพื่อเข้าถึงคุณลักษณะข้อมูลย่อย ซึ่งเป็นข้อมูลชั้นถัดมา
    		inner_obj = obj_value
    		for inner_obj_key, inner_obj_value in inner_obj.items():
    			print("--------key: {}, value: {}".format(inner_obj_key, inner_obj_value) )
    	else:	
                    # ทำการปรินต์ค่าชื่ออ้างอิงข้อมูล(key) พร้อมค่าข้อมูล(value)
    		print("key: {}, value: {}".format( obj_key, obj_value ) )
    
    # โปรแกรมทำการปรินต์ค่า
    # key: name, value: ไฮดี้(Heidi)
    # key: isbn, value: 9786160436651
    # key: author
    # --------key: name, value: Johanna Spyri
    # --------key: birthday, value: 12 มิถุนายน 2370
    # --------key: email, value: -
    # key: translator
    # --------key: name, value: วันเพ็ญ บงกชสถิตย์
    # --------key: birthday, value: -
    # --------key: email, value: i_am_translator@example.com
    # key: illustrator
    # --------key: name, value: พิมพ์ศศิธร ออสติ
    # --------key: birthday, value: -
    # --------key: email, value: i_am_illustrator@example.com
    # key: weight, value: 0.201 KG
    # key: size, value: 12.7 × 18.4 × 1.45
    # key: publisher, value: นานมีบุ๊คส์
    # key: publish_year, value: 2561
    # key: pages, value: 266
    # key: category, value: ['วรรณกรรม', 'วรรณกรรมเยาวชน']
    # key: price, value: 220
    
    

    จากตัวอย่างข้างต้น ในลูปแรกเราทำการวนลูปเพื่อดึงข้อมูลคุณลักษณะของหนังสือทั้งหมด โดยจะทำการพิจารณาข้อมูลว่า หากข้อมูลที่บรรจุอยู่ภายในเป็นชุดข้อมูลชนิดดิกชันนารีแล้ว จำเป็นต้องทำการวนลูปเพิ่มขึ้นอีกชั้นหนึ่งเพื่ออ่านข้อมูลจากคุณลักษณะย่อยดังกล่าว แล้วจึงค่อยทำการปรินต์คุณลักษณะของข้อมูลย่อยนั้น แต่หากไม่ใช่ชุดข้อมูลชนิดดิกชันนารี ให้ทำการปรินต์คุณลักษณะข้อมูลดังกล่าว โดยในการปรินต์ข้อมูลจะมีทั้งชื่อข้อมูล(key) และค่าของข้อมูล(value)
    ในตัวอย่างโปรแกรมข้างต้นยังมีข้อจำกัด ซึ่งสามารถรองรับได้เพียงแค่ในกรณีที่มีชุดข้อมูลชนิดดิกชันนารีย่อยได้แค่เพียง 1 ระดับเท่านั้น

ข้อควรจำ

  1. ชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) เป็นชุดข้อมูลซึ่งไม่มีการเรียงลำดับของข้อมูล เหมือนกับชุดข้อมูลชนิดดิกชันนารีแบบปกติ ดังนั้นจะไม่สามารถเข้าถึงข้อมูลโดยอาศัยลำดับของข้อมูลได้
  2. เราไม่สามารถดึงข้อมูลเป็นชุดข้อมูลย่อยในลักษณะเดียวกับการอ้างอิงช่วงของข้อมูล โดยใช้ลำดับของข้อมูลที่ใช้ในข้อมูลชนิดลิสต์ได้
  3. เราสามารถยืด/ขยาย ชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) โดยการเพิ่มคุณลักษณะหรือเพิ่มระดับชั้นของความลึกของข้อมูลได้ตามต้องการ
  4. ชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) แต่ละข้อมูลจะมีการเก็บทั้งชื่ออ้างอิง(key)และค่าข้อมูล(value) เช่นเดียวกันกับ ชุดข้อมูลชนิดดิกชันนารี(dictionary) ปกติ
  5. เราสามารถเข้าถึงค่าข้อมูลต่างๆ ภายในชุดข้อมูลชนิดดิกชันนารีโดยใช้ชื่ออ้างอิง(key) ของข้อมูล หากข้อมูลที่ต้องการเข้าเป็นข้อมูลย่อย เราจะเป็นต้องใช้อ้างอิงข้อมูลตั้งแต่ระดับนอกสุดจนไปถึงระดับข้อมูลย่อยดังกล่าว

ที่มาของข้อมูล: https://www.programiz.com/python-programming/nested-dictionary
ข้อมูลอ้างอิง: https://en.wikipedia.org/wiki/Johanna_Spyri
ที่มาของข้อมูลหนังสือ:
https://www.nanmeebooks.com/heidi.html
https://www.naiin.com/product/detail/232954
ภาพหนังสือ:
https://www.nanmeebooks.com/heidi.html