มาทำความเข้าใจความสัมพันธ์ของ Dictionary in Python กันเทอะ !

--

สวัสดีครับ ช่วงนี้ได้มีโอกาสใช้งาน Django framework ซึ่งมีการใช้งาน Object type Dictionary ค่อนข้างมาก เลยอยากเขียนเคสความสัมพันธ์ซับซ้อน(ในความคิดเห็นของผม)

Requirement

  • installed Python ver. 2.7 / 3+

For Windows : https://phoenixnap.com/kb/how-to-install-python-3-windows

For MacOS : https://docs.python-guide.org/starting/install3/osx/

การนำเสนอของผม ผมจะใช้ Python shell บน Terminal เป็นหลัก

หลักสำคัญของ Dictionary นั้น คือ รูปแบบโครงสร้างข้อมูล(Data structure) ที่เหมาะสำหรับการ Group Object ในความเข้าใจของผมคือการจับคู่ ของ Keys / Values ครับ

เริ่มกันเลย

  • เปิด Terminal ขึ้นมา และ พิม Python
เริ่มต้นเข้า Python shell ด้วยการพิม cmd “python”
  • จากนั้นเราจะเข้าสู่ Python Shell

เริ่มด้วยการสร้าง Dictionary ของเรา โดยเราจะสร้าง Dictionary ชื่อ Movie นะครับ

movie = { 
"name" : "AAA-001" ,
"subtitle":"Thai",
"star":"Tiw Lip",
}

โอเคครับ อันนี้เริ่มต้นเบาๆด้วยการ Print ชื่อของหนังออกมา

print(Dictname[key]) ซึ่งเราก็จะได้ Value ที่เป็นชื่อหนังของเราออกมา

จากการใส่ ชื่อ key เราก็จะได้ value ออกมา

แล้วถ้าใน Dictionary ของเรามี Dictionary อยู่ข้างในอีกทีล่ะ ?

เราจะสร้าง Dictionary ใหม่ ชื่อ movies

movies = { 
"name" : "AAA-001" ,
"subtitle":{
"Thai",
"Eng"
},
"star": {
"actor":"Tiw Lip",
"actress":"Sora"
},
}

เรามาลอง print dir(movies) ดู จะได้รู้ว่าเราสามารถทำอะไรกับ Object นี้ได้บ้าง

เราจะเห็นว่า ที่น่าลองใช้จะมี “values” , “items”, “get”

แต่ถ้าเราอยากได้value เฉพาะ นักแสดงนำชาย(actor)ของ starล่ะ

เราสามารถใช้ key ใน nested object เอาvalue ออกมาได้ หรือเราจะ .get(“actor”)แทน [“actor”] ก็ได้นะ

แล้วเราใช้ index ในการ ดึงvalue ของ Dict ได้ไหมนะ ?

จากตรงนี้เราจะเห็นว่า มันไม่พบ key ที่ชื่อ 0

งั้นเรา get values ทั้งหมดของstar มาแล้วใส่ ตำแหน่งดีไหม

อย่าลืมว่า object แบบ Dictionary ต้องใช้ key เพื่อดึง value

ทีนี้เรามาลองเปลี่ยน Type ของ Dict แล้วดึงvalue ออกมา

ซึ่งพอเป็น list object เราก็สามารถ ดึงvalue ออกมาได้

แล้วแบบไหนล่ะที่เราสามารถ ใช้ index ดึง value ออกมาได้ ?

เราจะมาปรับtype object ของเรานิดหน่อย star เดิมเป็น{} เปลี่ยนเป็น[]

movies = { 
"star": [
{
"actor":"Tiw Lip",
},
{
"actor":"MN ANP",
},
],
}

ซึ่งจากเคสแบบนี้เราจะเห็นว่า key มันเหมือนกันอะ แล้วจะget value คนแรกยังไงดี

type ของ movies[“star”] เป็น List

เราเลยใช้ index ในการget valuesออกมา แต่มันดันติด keyมาด้วย ข้างในเป็น Dict รึป่าวนะ ?

ไส้ในของมันก็ยังเป็น Dict อยู่ แบบนี้เราใช้ key ดึง value ได้ไหมนะ

เรามาลองใช้วิธีเดิม ใช้ key ของ nested dict มาดึงvalue เราจะพบว่ามันติดปัญหาว่า Type List ไม่สามารถดึง keyได้ ตามรูปด้านล่าง

Type List ไม่สามารถ ดึงชื่อ Key มาได้ เพราะไม่ใช่ Dict

เราก็เลยต้องระบุindex ของList ก่อน

ระบุ index ของ List

เท่านี้เราก็จะสามารถดึงValue ออกมาได้ แม้ความสัมพันธ์จะซับซ้อนแค่ไหน ขอแค่เข้าใจมัน

สรุป

“ ในทุกๆความสัมพันธ์เราต้องเข้าใจรูปแบบของมัน และชัดเจนกับมัน เมื่อเราเข้าใจในทุกๆความสัมพันธ์ เราก็จะเห็นคุณค่าของความสัมพันธ์ ”

ในการเลือกใช้ Data structure รูปแบบไหน ควรคำนึงถึงเคสการนำไปใช้ให้ดี ซึ่งเราจะเห็นข้อแตกต่าง ระหว่างแบบที่มี List ครอบ Dict เพราะ ในList มีชื่อ key ที่เหมือนกัน กับ อีกแบบที่ใช้ dict[key][nested key] ดึงข้อมูลออกมา เพราะ key ใน nested dict key แตกต่างกัน

ขอบคุณที่อ่านจนจบ หากผิดพลาดประการใด ขออภัยนะครับ

และสุดท้าย ไอเดียในการขยายความสัมพันธ์ ของ Dictionary ใน Python เกิดขึ้นได้หลังจากเรียน Django จากพี่แอร์ แมวใบไม้ ครองโลก Airmee Chanita Anuwong ขอบคุณครับ

--

--