ดิกชันนารี (Dictionary)

ความหมายของดิกชันนารี

ดิกชันนารี (Dictionary) คือประเภทข้อมูลที่เก็บข้อมูลในเป็นคู่ๆ ของ Key และ Value โดยที่ Key ใช้สำหรับเป็น Index ในการเข้าถึงข้อมูล Value ของ Key นั้นๆ การสร้าง Dictionary เปล่าจะเขียนอยู่ภายในวงเล็บปีกกา หรือ dict() ส่วนการใส่ค่าใน Dictionary จะเขียนอยู่ในวงเล็บปีกกา แต่ละคู่จะขึ้นต้น key ตามด้วย : แล้วตามด้วย value และคั่นคู่ด้วยเครื่องหมาย comma (,) ดังตัวอย่างต่อไปนี้

การสร้าง Dictionary
>>> stocks = {scb': 160, 'ptt': 360'}
>>> stocks
{'scb': 160, 'ptt': 360}

การอ่านค่าในดิกชันนารี

การอ่านค่าใน Dictionary ด้วยคำสั่ง for หรือการใช้ Dictionary เป็น Iterators เมื่อมีการประกาศค่าของ Dictionary แล้ว for จะวนอ่านค่าใน Dictionary ทีละตัว เช่น

for key in stocks:
   print(key, stocks[key])

ตัวอย่างการใช้ Dictionary เป็น Iterator

ตัวอย่างการใช้ Dictionary เป็น Iterator
stocks = {scb': 160, 'ptt': 360'}
for key in stocks:
   print('{0} = {1}'.format(key, stocks[key]))

ซึ่งได้ผลลัพธ์ดังนี้

ผลลัพธ์จากตัวอย่างการใช้ Dictionary เป็น Iterator
ptt = 360
scb = 160

การหาค่าของคีย์ (Key) ใน Dictionary

การหาค่าของคีย์ในดิกชันนารีเมื่อรู้ value เช่น สร้างฟังก์ชัน มีการส่ง Parameters สองตัวคือ Dictionary กับ Value สำหรับ Key แต่ละตัวใน Dictionary นี้ ถ้า ค่าของ Dictionary เท่ากับ Value ที่ต้องการ ให้ส่งค่า Key กลับมา แต่ถ้าไม่มีก็จะไม่ต้องส่งอะไรออกมา ดังตัวอย่างต่อไปนี้

Source code ตัวอย่างการสร้างฟังก์ชัน Reverse lookup สำหรับ Dictionary
def reverse_lookup(d,v):
   for key in d:
      if d[key] == v:
         return key
   return None

ซึ่งได้ผลลัพธ์ดังนี้

ผลลัพธ์จากตัวอย่างการสร้างฟังก์ชัน Reverse lookup สำหรับ Dictionary
>>> reverse_lookup(stocks, 160)
'scb'

Dictionary และ List

keys() method จะแสดง keys ออกมา ส่วน values() method จะแสดง values ออกมา ดังตัวอย่างต่อไปนี้

keys() และ values() methods
>>> stocks.keys()
dict_keys(['ppt','scb'])
>>> stocks.values()
dict_values([360,160])

ดังนั้น stocks.keys() และ stocks.values() คือ ลิสต์สองตัว ตัวหนึ่งเป็น keys อีกตัวเป็น values ที่ map เข้าหากัน จำไว้ว่า ค่าของลิสต์หรือ dictionary สามารถเป็นได้ทั้งลิสต์และ dictionary ด้วย

ฟังก์ชันที่รับ Parameters ได้ไม่จำกัดจำนวน

เมื่อไรก็ตามที่ต้องการสร้างฟังก์ชันที่รับ Parameters ได้ไม่จำกัดจำนวนและบอก Keywords ได้ด้วย ให้ใส่เครื่องหมายดอกจัน (*) สองครั้งไว้หน้า Parameters หมายความว่าสิ่งที่ผ่านเข้ามาทาง Parameters จะเป็น Dictionary ดังตัวอย่างต่อไปนี้

ตัวอย่าง Keyword argument dictionary
def printall(**kwargs):
for key in kwargs:
   print(key + ' ' + str(kwargs[key]), end=' ')

ซึ่งได้ผลลัพธ์ดังนี้

ผลลัพธ์จากตัวอย่างKeyword argument dictionary
>>> printall(x=1, y=2, z=3)
y 2 z 3 x 1

แต่หากต้องการให้ Arguments หรือ Parameters ที่รับเข้ามาเป็น list ให้ใส่เครื่องหมายดอกจัน (*) หนึ่งครั้งไว้หน้า Parameters ดังตัวอย่างต่อไปนี้

Source code ตัวอย่าง List argument
def printall(\*args):
   for x in args:
      print(x)

ซึ่งได้ผลลัพธ์ดังนี้

ผลลัพธ์จาก ตัวอย่าง List argument
>>> printall(1,2,3,4,5)
1 2 3 4 5

แบบฝึกหัด

  1. ให้ dictionaryมีค่าคือ {0: 10, 1: 20} เขียนโปรแกรมให้เพ่ิมค่าอีกคู่เข้าไปคือ 2: 30

  2. ทําการรวมค่าท้ังหมดในdictionaryนี้ {'cats': 100,'dogs': 60,'pigs': 300}

  3. ทําการเชื่อมต่อ dictionary ท้ัง3ชุดน้ีให้เป็นชุดเดียว

    • dic1={1:10,2:20} dic2={3:30,4:40} dic3={5:50,6:60}

  4. จงดําเนินการต่อไปน้ี

    • สร้าง dictionary ช่ือ stock มีค่าคือ "banana": 40, "apple": 10, "orange": 15, "pear": 33

    • สร้างdictionaryชื่อpricesมีค่าคือ "banana": 4, "apple": 2, "orange": 1.5, "pear": 3

    • ให้คํานวณว่าถ้าขายผลไม้ได้ทั้งหมดจะได้เงินเท่าไร

  5. เขียนฟังก์ชันตรวจสอบว่ามีค่าตัวเลขที่รับมาให้ key ของ dictionary หรือไม่โดยให้ d คือ dictionary มีค่าคือ {1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60}