ดิกชันนารีเป็นชนิดของการเก็บข้อมูลที่มีลักษณะคล้ายกับลิสต์และทูเพิล คือเก็บข้อมูลได้หลาย ๆ ค่าในตัวแปรเดียวกัน แต่คุณสมบัติพิเศษของดิกชันนารีคือมีข้อมูลตั้งแต่ 2 ค่าขึ้นไปและมีความสัมพันธ์กัน การจัดการกับดิกชันนารี จึงมีวิธีการหลายอย่างที่แตกต่างจากตัวแปรชนิดอื่นที่ได้กล่าวมา ซึ่งโปรแกรมภาษาไพธอนมีคำสั่งให้เรียกใช้อยู่ภายในไลบรารีอยู่แล้ว ได้แก่ การประกาศตัวแปร การเพิ่มข้อมูล การแสดงผลข้อมูล การกำหนดตำแหน่งที่ต้องการ และการสลับตำแหน่งคีย์ของข้อมูล
1. โครงสร้างของดิกชันนารี
ดิกชันนารีมีโครงสร้างของข้อมูลที่มีความสัมพันธ์กันแบบหนึ่งต่อหนึ่ง อย่างไร ก็ตามสามารถสร้างดิกชันนารีแบบหนึ่งต่อกลุ่ม และแบบกลุ่มต่อกลุ่มได้ ในกรณีที่เป็นความสัมพันธ์แบบหนึ่งต่อกลุ่มให้ใช้หลักการของลิสต์ได้ แต่ถ้าความสัมพันธ์แบบกลุ่มต่อกลุ่มต้องใช้ลิสต์เป็นคีย์และใช้ทูเพิลเป็นข้อมูล ดังตัวอย่างในภาพที่ 3.7
# one to one relation
>>> numberDic = {1 :'one', 2:'two',3:'three', 4:'four'}
# one to many relation
>>> strDic = { 'teacher' : ['Somchai', 'Somporn', 'Somkid', 'Somsri'],\
'student' : ['Nadia', 'Sofia', 'Abdoll']}
# many to many relation
>>> numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> chars = ('a', 'b', 'c', 'd', 'e', 'f')
>>> specChar = ('.', '!', '?')
>>> charSetDic = {numbers:[],chars : [], specChar : []}
ภาพที่ 3.7 แสดงคำสั่งเพื่อสร้างดิกชันนารีประเภทต่าง ๆ
จากภาพที่ 3.7 จะเห็นว่าโครงสร้างของดิกชันนารีไม่เหมือนกับโครงสร้างของลิสต์หรือทูเพิล ในลักษณะที่ดิกชันนารีจะต้องมีคีย์และข้อมูล เพื่อให้เข้าใจในเรื่องนี้ จะขอยกตัวอย่างจากคำสั่ง
numberDic = {1 : 'one', 2 : 'two', 3 : 'three', 4 : 'four'}
คีย์ ได้แก่ 1, 2, 3, 4
ข้อมูล ได้แก่ 'one', 'two', 'three', 'four'
แต่ทั้งคีย์และข้อมูลจะต้องไปด้วยกัน เช่น ข้อมูลของคีย์ 1 หมายถึง 'one' เท่านั้น
2. การเพิ่มข้อมูลเข้าไปในดิกชันนารี
ในการเพิ่มข้อมูลเข้าไปในดิกชันนารี จะต้องระบุคีย์ที่ต้องการจะป้อนข้อมูลเข้าไปในตำแหน่งของคีย์ใด ในกรณีที่ไม่ตรงกับชื่อคีย์ที่อยู่ในดิกชันนารีเดิม โปรแกรมภาษาไพธอนจะสร้างคีย์ใหม่ขึ้นมาและจะเก็บข้อมูลนั้นเข้าไปในคีย์นั้น แต่ถ้ามีชื่อคีย์อยู่ในดิกชันนารีอยู่แล้ว ข้อมูลจะเข้าไปแทนที่ข้อมูลเดิมในตำแหน่งของคีย์ที่ระบุ ซึ่งใช้สำหรับการแก้ไขข้อมูลภายในตัวแปรนั้น ดังตัวอย่างภาพที่ 3.8
>>> studentDict = {'001' : 'ton', '002' : 'jan', '003' : 'jane', '004' : 'ball'}
>>> studentDict['005'] = 'pla' # add
>>> print(studentDict)
{'001': 'ton', '002': 'jan', '003': 'jane', '004': 'ball', '005': 'pal'}
>>> studentDict['005'] = 'pond' # update
>>> print(studentDict)
{'001': 'ton', '002': 'jan', '003': 'jane', '004': 'ball', '005': 'pond'}
ภาพที่ 3.8 แสดงคำสั่งและผลลัพธ์การเพิ่มข้อมูลในดิกชันนารี
3. การนำข้อมูลดิกชันนารีแสดงผล
ข้อมูลในดิกชันนารีสามารถเข้าถึงและให้แสดงผลได้หลายวิธี วิธีง่าย ๆ ได้แก่ การระบุชื่อคีย์ให้อยู่ในวงเล็บเหลี่ยม ข้อมูลภายในคีย์จะแสดงออกมา ในกรณีที่เป็นลิสต์อยู่ในดิกชันนารีสามารถใช้เมท็อด values() ซึ่งเมท็อด values จะส่งข้อมูลในลิสต์ที่อยู่ในดิกชันนารีกลับมาแสดง ในทำนองเดียวกันสามารถใช้เมท็อด keys() เพื่อให้ส่งชื่อคีย์มาแสดง การใช้คำสั่งแบบนี้เหมาะสำหรับข้อมูลที่เก็บอยู่ในรูปทูเพิล นอกจากนี้ยังสามารถใช้ เมท็อด items() เพื่อให้แสดงผลทั้งชื่อคีย์และข้อมูลทั้งหมดออกมาแสดง ดังตัวอย่างในภาพที่ 3.9
>>> person = {'name' : 'Somsak', 'son' : ['Somchai', 'Somkid', 'Sombat'],\
'birthday' : '12-04-2530', 'phoneNo' : '074-312726'}
>>> print(person.keys())
dict_keys(['name', 'son', 'birthday', 'phoneNo'])
>>> print(person.values())
dict_values(['Somsak', ['Somchai', 'Somkid', 'Sombat'], '12-04-2530', '074-312726'])
>>> print(person.items())
dict_items([('name', 'Somsak'), ('son', ['Somchai', 'Somkid', 'Sombat']), ('birthday', '12-04-2530'), ('phoneNo', '074-312726')])
>>> val = person["name"]
>>> print(val)
Somsak
>>> sonVal = person["son"]
>>> print(sonVal)
['Somchai', 'Somkid', 'Sombat']
ภาพที่ 3.9 แสดงคำสั่งและผลลัพธ์การเข้าถึงดิกชันนารี
4. การกำหนดตำแหน่งข้อมูลของดิกชันนารี
การกำหนดตำแหน่งเพื่อเข้าถึงข้อมูลที่เป็นกลุ่มในดิกชันนารี ไม่มีวิธีการใด ๆ โดยตรง แต่สามารถใช้เมท็อด keys() เพื่อจัดการเช่นเดียวกับการเข้าถึงข้อมูลแบบลิสต์ จากนั้นให้ใช้ฟังก์ชัน get() เพื่อนำข้อมูลออกมา หรือถ้าต้องการลบข้อมูลออกให้ใช้ฟังก์ชัน pop() ดังตัวอย่างตัวอ่างที่ 3.10
>>> year ={1:'January',2:'February',3:'March', 4:'April',\
5:'May', 6:'June', 7:'July', 8:'August',\
9:'September', 10:'October', 11:'November',\
12:'December'}
>>> print(year)
{1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December'}
>>> print(year[1])
January
>>> months = year.keys()
>>> print(months)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> print(year.get(1))
January
>>> print(year.pop(12))
December