ดิกชันนารี (Dictionary)
ความหมายของดิกชันนารี
ดิกชันนารี (Dictionary) คือประเภทข้อมูลที่เก็บข้อมูลในเป็นคู่ๆ ของ Key และ Value โดยที่
Key ใช้สำหรับเป็น Index ในการเข้าถึงข้อมูล Value ของ Key นั้นๆ การสร้าง Dictionary
เปล่าจะเขียนอยู่ภายในวงเล็บปีกกา หรือ dict()
ส่วนการใส่ค่าใน Dictionary
จะเขียนอยู่ในวงเล็บปีกกา แต่ละคู่จะขึ้นต้น key ตามด้วย : แล้วตามด้วย value
และคั่นคู่ด้วยเครื่องหมาย comma (,) ดังตัวอย่างต่อไปนี้
>>> 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
stocks = {scb': 160, 'ptt': 360'}
for key in stocks:
print('{0} = {1}'.format(key, stocks[key]))
ซึ่งได้ผลลัพธ์ดังนี้
ptt = 360
scb = 160
การหาค่าของคีย์ (Key) ใน Dictionary
การหาค่าของคีย์ในดิกชันนารีเมื่อรู้ value เช่น สร้างฟังก์ชัน มีการส่ง Parameters สองตัวคือ Dictionary กับ Value สำหรับ Key แต่ละตัวใน Dictionary นี้ ถ้า ค่าของ Dictionary เท่ากับ Value ที่ต้องการ ให้ส่งค่า Key กลับมา แต่ถ้าไม่มีก็จะไม่ต้องส่งอะไรออกมา ดังตัวอย่างต่อไปนี้
def reverse_lookup(d,v):
for key in d:
if d[key] == v:
return key
return None
ซึ่งได้ผลลัพธ์ดังนี้
>>> 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 ดังตัวอย่างต่อไปนี้
def printall(**kwargs):
for key in kwargs:
print(key + ' ' + str(kwargs[key]), end=' ')
ซึ่งได้ผลลัพธ์ดังนี้
>>> printall(x=1, y=2, z=3)
y 2 z 3 x 1
แต่หากต้องการให้ Arguments หรือ Parameters ที่รับเข้ามาเป็น list ให้ใส่เครื่องหมายดอกจัน (*) หนึ่งครั้งไว้หน้า Parameters ดังตัวอย่างต่อไปนี้
def printall(\*args):
for x in args:
print(x)
ซึ่งได้ผลลัพธ์ดังนี้
>>> printall(1,2,3,4,5)
1 2 3 4 5
แบบฝึกหัด
ให้ dictionaryมีค่าคือ
{0: 10, 1: 20}
เขียนโปรแกรมให้เพ่ิมค่าอีกคู่เข้าไปคือ2: 30
ทําการรวมค่าท้ังหมดในdictionaryนี้
{'cats': 100,'dogs': 60,'pigs': 300}
ทําการเชื่อมต่อ dictionary ท้ัง3ชุดน้ีให้เป็นชุดเดียว
dic1={1:10,2:20} dic2={3:30,4:40} dic3={5:50,6:60}
จงดําเนินการต่อไปน้ี
สร้าง dictionary ช่ือ stock มีค่าคือ
"banana": 40, "apple": 10, "orange": 15, "pear": 33
สร้างdictionaryชื่อpricesมีค่าคือ
"banana": 4, "apple": 2, "orange": 1.5, "pear": 3
ให้คํานวณว่าถ้าขายผลไม้ได้ทั้งหมดจะได้เงินเท่าไร
เขียนฟังก์ชันตรวจสอบว่ามีค่าตัวเลขที่รับมาให้ key ของ dictionary หรือไม่โดยให้
d
คือ dictionary มีค่าคือ{1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60}