Skip to main content

Dictionary

Dictionary เป็นการเก็บข้อมูลประเภทหนึ่ง ซึ่งจะมีความคล้ายคลึงกับการเก็บตัวแปรหลายๆอันเข้าไปสู่ตัวแปรเดียวกัน

โดย Dictionary จะมีข้อมูลอยู่ 2 ประเภท นั่นคือ

  • Key (พูดง่ายๆก็คือตัวแปร)
  • Value (พูดง่ายๆก็คือค่าที่อยู่ในตัวแปร)

แต่ว่า Dictionary สามารถเก็บข้อมูล (Key และ Value) ได้หลายๆอัน ทำให้น้องๆสามารถเรียกค่า (Key) เพื่อเอาผลลัพท์ (Value) ได้

โดยน้องๆมีหลาย Key ก็ได้ แต่อาจจะไม่มี Value (ก็คือปล่อยให้ค่า Value เป็น None หรือว่า Null)


สร้าง dictionary​

สร้าง Dictionary เปล่าๆ​

น้องสามารถสร้างตัว Dictionary ใหม่โดยการใช้ฟังก์ชั่น dict() เพื่อเปลี่ยนตัวแปรให้เก็บข้อมูลแบบ Dictionary และสร้่าง dictionary เปล่าๆขึ้นมา 1 อัน

ตัวอย่างการเขียน

my_dictionary = dict()

สร้าง dictionary โดยการเขียนเอง​

โดยฝั่งซ้ายจะเป็นค่า key และฝั่งขวาจะเป็นค่า value

my_dictionary = {
"happy" : 20,
"not happy" : 30,
"sad" : False
}

my_dictionary = {"happy" : 20, "not happy" : 30, "sad" : False}

โดยน้องๆอาจจะเขียนแบบที่ 1 ที่จะแยกบรรทัด หรือเขียนแบบบรรทัดเดียวกันก็ได้ครับ

แต่เขียนไปเป็นหลายบรรทัด น้องๆจะอ่านมันได้ง่ายขึ้นครับ จึงเหมาะกับน้องๆที่ไม่ชอบอ่านโค้ดยากๆ ยาวๆ


เรียกข้อมูลมาจาก Dictionary​

แบบเหมือน Lists​

ก็สามารถเรียกเหมือน List ได้เลย แต่การเรียกจะใส่เป็น Key แทน ไม่เหมือน List ที่จะใส่เป็นลำดับของข้อมูล

my_dictionary['happy'] # Returns 20

หรือน้องๆอาจจะเช็คก่อนว่ามี key นั้นๆอยู่หรือเปล่าโดยการใช้ keyword in

"happy" in my_dictionary # Return true
20 in my_dictionary # Return true

หากคืนกลับมาเป็น True (เหมือนกับตัวอย่าง) ก็จะบอกได้ว่ามี Key ที่ชื่อนั้นอยู่ใน dictionary นั้นๆ

แบบใช้ methods​

ในแบบนี้ น้องๆก็จะได้ใช้ .get() และ .setdefault() ทำให้น้องๆอาจจะจัดการกับ Key ที่ไม่เคยอยู่จริงก็ได้ครับ

การใช้ .get() ก็เหมือนกับการเรียกถามหา Value จากค่า Key ที่น้องให้มาเลย แต่จะแตกต่างออกไปคือ หากว่ามันหาแล้วไม่เจอ ก็จะคืนค่า None กลับมาแทน

ตัวอย่างเช่น

my_dict.get('Kuma')

แต่หากว่าน้องๆไม่ต้องการที่จะขอคืนเป็น Null ก็สามารถใส่ Parameter default เข้าไปด้วยก็ได้ครับ เช่นว่า หากไม่เจอ ก็ให้คืนเป็น 0

my_dict.get('Kuma', default = 0)

และสำหรับ .setdefault() ก็จะเหมือนกับ .get() เลย แต่ว่าจะใส่ค่าที่น้องเคยหาเข้าไปใน dictionary ด้วย เหมือนมันสร้างว่า key ที่น้องหา เท่ากับ None แล้วก็เอาไปเก็บไว้ใน dictionary แล้วก็ค่อยเรียกค่านั้นอีกรอบ


เพื่มค่าเข้าใปใน Dictionary​

ถ้าน้องๆต้องการเพื่มค่าเข้าไปใน Dictionary ก็สามารถทำการเพื่ม ด้วยการเขียน

<variableName>[<key>] = <value>

เช่นว่าพี่ต้องการบอกให้ kumamon = 12 และไปอยู่ในตัวแปร dictionary ที่ชื่อว่า my_dict ก็จะเขียนได้ดังนี้ครับ

my_dict['kumamon'] = 12

ลบค่าออกจาก Dictionary​

โดยน้องๆสามารถที่จะลบ

  • ทุกตัว
  • ตัวที่น้องเลือก
  • ลบความเป็น Dictionary ออกไป

ลบค่าบางตัวออกจาก Dictionary​

น้องๆสามารถใช้ keyword del เพื่อทำการลบค่าออกไปครับ ตัวอย่างเช่น

del my_dict['Kumamon']

มันก็จะทำการลบค่า Key + Value ที่ Key มีค่าเท่ากับ 'Kumamon' ออกไป
เหมือนกับว่ามันไม่เคยเกิดขึ้นมาก่อนเลย

ลบค่าทุกตัวออกจาก Dictionary​

น้องๆสามารถใช้ method .clear() เพื่อทำการล้างค่า Key + Value ออกไป ทำให้ตัวแปรเป็น Dictionary เปล่าๆ

ตัวอย่างการเขียน

my_dict.clear()

ลบความเป็น Dictionary ออกไป​

เหมือนทำให้ตัวแปรนั้นเก็บเป็นค่า None ไปเลย พูดง่ายๆก็คือที้งมันไปเลย โดยการใช้ keyword del

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

del my_dict

ก็จะทำให้เวลาน้องเรียกตัวแปร my_dict ก็จะขึ้นแบบน้ีครับ

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'mydict' is not defined

เพราะการใช้ del เป็นการลบตัวแปรออกไปเลย ไม่เหมือนการเขียน my_dict = None นะครับ เพราะว่าอันนั้น ตัวแปรยังอยู่


เช็คค่า Keys และ Values ที่อยู่ใน Dictionary​

น้องๆสามารถใช้ .keys() สำหรับการดูค่า keys ทั้งหมดใน Dictionary
และใช้ .values() เพื่อดูค่า values ทั้งหมดใน Dictionary

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

my_dictionary = {"happy" : 20, "not happy" : 30, "sad" : False}

print(my_dictionary.keys())
print(my_dictionary.values())

ก็จะออกมาเป็น

dict_keys(['happy', 'not happy', 'sad'])
dict_values([20, 30, False])

โดยมันคืนออกมาเป็นตัวแปรประเภท dict_keys และ dict_values นั่นเอง น้องจะยังไม่สามารถเอาข้อมูลที่น้องขอมา เพื่อเอาไปใช้ได้นะครับ