Python – Nested Dictionary
ชุดข้อมูลชนิดดิกชันนารีที่มีข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) คือการที่มีการเก็บข้อมูลในรูปแบบชุดข้อมูลชนิดดิกชันนารีอยู่แล้ว และยังมีชุดข้อมูลชนิดดิกชันนารีเป็นข้อมูลย่อยซ้อนอยู่ภายใน เพื่อประกอบกันเป็นชุดข้อมูลชนิดดิกชันนารีที่บรรจุข้อมูลทั้งหมดเพียงแค่ตัวเดียว
จากในบทที่แล้วที่ได้พูดถึงการใช้งานชุดข้อมูลชนิดดิกชันนารีโดยใช้ตัวอย่างเป็นชุดข้อมูลของหนังสือเล่มหนึ่ง เราจะยังคงใช้ข้อมูลดังกล่าวในตัวอย่างของบททนี้ โดยจะมีการปรับข้อมูลให้มีรายละเอียดเพิ่มขึ้นสำหรับข้อมูลที่เป็นชื่อของบุคคลทุกชื่อที่มีอยู่ในชุดข้อมูล ให้กลายเป็นชุดข้อมูลชนิดดิกชันนารีแทนที่จะเป็นข้อมูลเดี่ยวเช่นข้อมูลชนิดข้อความ(string) โดยชุดข้อมูลของแต่ละบุคคลจะประกอบด้วยข้อมูลของ ชื่อ(name), วันเกิด(birthday), อีเมลล์(email)
* เนื่องจากข้อมูลอีเมลล์ของผู้แปลและอีเมลล์ผู้วาดภาพประกอบเป็นข้อมูลไม่มีอยู่ในข้อมูลจริงในข้อมูลอ้างอิง จึงขอใช้ข้อมูลตัวอย่างแทนสำหรับเนื้อหาในบทนี้ โดยกำหนดให้
- ข้อมูลตัวอย่างอีเมลล์ของผู้แปลเป็น “i_am_translator@example.com”
- ข้อมูลตัวอย่างอีเมลล์ผู้วาดภาพประกอบเป็น “i_am_illustrator@example.com”
- ชื่อหนังสือ(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)
-
การสร้างชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(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) เพิ่มเติมด้วย
-
การเข้าถึงชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(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)ไว้ก่อน แล้วจึงค่อยทำการเพิ่มชุดข้อมูลเกี่ยวกับผู้วาดภาพประกอบดังกล่าวเข้าไปในข้อมูลของหนังสือเล่มหนึ่งซึ่งก็ถูกเก็บไว้แล้วในรูปแบบชุดข้อมูลชนิดดิกชันนารีเช่นกัน
ในการเพิ่มข้อมูลใหม่สามารถทำได้โดยอ้างอิงถึงข้อมูลภายในที่ต้องการ(หากมีระดับย่อยก็จำเป็นต้องอ้างอิงข้อมูลตังแต่ระดับนอกสุดถึงระดับย่อยดังกล่าว) แล้วใช้เครื่องหมาย “=” ในการกำหนดค่าด้วยข้อมูลทางด้านขวาของเครื่องหมาย หากข้อมูลของคุณลักษณะดังกล่าวยังไม่มีอยู่ คุณลักษณะดังกล่าวจะถูกเพิ่มเข้าไปในระบบด้วยค่าที่ระบุ แต่หากข้อมูลของคุณลักษณะดังกล่าวมีอยู่แล้วในชุดข้อมูล ข้อมูลนั้นก็จะถูกทำการแก้ไขด้วยค่าที่ระบุ -
การเพิ่มชุดข้อมูลชนิดดิกชันนารีย่อย ลงไปในชุดข้อมูลชนิดดิกชันนารี(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), # ชุดข้อมูลของผู้วาดภาพประกอบ(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 # } - การลบข้อมูลชนิดดิกชันนารีที่เป็นข้อมูลย่อยอยู่ภายในชุดข้อมูลชนิดดิกชันนารี(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'
-
การลบรายละเอียดของชุดข้อมูลชนิดดิกชันนารีที่เป็นข้อมูลย่อยอยู่ภายในชุดข้อมูลชนิดดิกชันนารี โดยลบเพียงคุณลักษณะบางอย่าง ด้วยคีย์เวิร์ด “del”
-
การวนลูปเพื่อดูค่าข้อมูลภายในชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(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 ระดับเท่านั้น
ข้อควรจำ
- ชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) เป็นชุดข้อมูลซึ่งไม่มีการเรียงลำดับของข้อมูล เหมือนกับชุดข้อมูลชนิดดิกชันนารีแบบปกติ ดังนั้นจะไม่สามารถเข้าถึงข้อมูลโดยอาศัยลำดับของข้อมูลได้
- เราไม่สามารถดึงข้อมูลเป็นชุดข้อมูลย่อยในลักษณะเดียวกับการอ้างอิงช่วงของข้อมูล โดยใช้ลำดับของข้อมูลที่ใช้ในข้อมูลชนิดลิสต์ได้
- เราสามารถยืด/ขยาย ชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) โดยการเพิ่มคุณลักษณะหรือเพิ่มระดับชั้นของความลึกของข้อมูลได้ตามต้องการ
- ชุดข้อมูลชนิดดิกชันนารีที่มีชุดข้อมูลชนิดดิกชันนารีซ้อนอยู่ภายใน(nested dictionary) แต่ละข้อมูลจะมีการเก็บทั้งชื่ออ้างอิง(key)และค่าข้อมูล(value) เช่นเดียวกันกับ ชุดข้อมูลชนิดดิกชันนารี(dictionary) ปกติ
- เราสามารถเข้าถึงค่าข้อมูลต่างๆ ภายในชุดข้อมูลชนิดดิกชันนารีโดยใช้ชื่ออ้างอิง(key) ของข้อมูล หากข้อมูลที่ต้องการเข้าเป็นข้อมูลย่อย เราจะเป็นต้องใช้อ้างอิงข้อมูลตั้งแต่ระดับนอกสุดจนไปถึงระดับข้อมูลย่อยดังกล่าว
ข้อมูลอ้างอิง: 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

