Python ดิกชันนารี (Dictionary)
ลิสต์เก็บของเรียงตามลำดับ เข้าถึงด้วยเลขตำแหน่ง แต่บางทีเราอยากเข้าถึงข้อมูลด้วย “ชื่อ” มากกว่า เช่น อยากได้ราคาของ “กาแฟ” ไม่ใช่ราคาของ “รายการที่ 3” ดิกชันนารีเก็บข้อมูลเป็นคู่ คีย์ (key) กับ ค่า (value) ให้เราค้นด้วยคีย์ได้ทันที
สร้างดิกชันนารี
ใช้ปีกกา {} แต่ละคู่เขียนเป็น คีย์: ค่า คั่นด้วยจุลภาค
student = {
"name": "สมชาย",
"age": 20,
"gpa": 3.45,
}
prices = {"กาแฟ": 45, "ชา": 40, "ขนมปัง": 25}
empty = {}คีย์มักเป็น string หรือตัวเลข ส่วนค่าเป็นอะไรก็ได้ รวมถึงลิสต์หรือ dict ซ้อนเข้าไปอีก
เข้าถึงค่า
ใส่คีย์ในวงเล็บเหลี่ยม
student = {"name": "สมชาย", "age": 20}
print(student["name"]) # สมชาย
print(student["age"]) # 20ถ้าคีย์ไม่มีอยู่ จะ error
print(student["email"]) # KeyError: 'email'get() ปลอดภัยกว่า
get() คืน None ถ้าไม่เจอคีย์ แทนที่จะ error และกำหนดค่า default ได้ด้วย
print(student.get("email")) # None
print(student.get("email", "ไม่ระบุ")) # ไม่ระบุ
print(student.get("name", "ไม่ระบุ")) # สมชายใช้ get() เมื่อไม่แน่ใจว่าคีย์จะมีไหม ใช้ [] เมื่อมั่นใจว่าต้องมี (ถ้าไม่มีแล้วอยากให้ error จะได้รู้ว่าโค้ดผิด)
เพิ่มและแก้ไข
ทั้งสองอย่างเขียนเหมือนกัน ถ้าคีย์มีอยู่แล้วคือแก้ ถ้ายังไม่มีคือเพิ่ม
student = {"name": "สมชาย", "age": 20}
student["age"] = 21 # แก้
student["email"] = "s@mail.com" # เพิ่ม
print(student)
# {'name': 'สมชาย', 'age': 21, 'email': 's@mail.com'}ลบ
student = {"name": "สมชาย", "age": 20, "email": "s@mail.com"}
del student["email"]
age = student.pop("age") # ลบพร้อมคืนค่า
print(age) # 20
print(student) # {'name': 'สมชาย'}เช็คว่ามีคีย์ไหม
prices = {"กาแฟ": 45, "ชา": 40}
print("กาแฟ" in prices) # True
print("นม" in prices) # False
if "นม" not in prices:
prices["นม"] = 20วนลูปในดิกชันนารี
prices = {"กาแฟ": 45, "ชา": 40, "ขนมปัง": 25}
# วนเอาคีย์ (ค่าเริ่มต้น)
for item in prices:
print(item)
# วนเอาทั้งคีย์และค่า — ใช้บ่อยสุด
for item, price in prices.items():
print(f"{item} ราคา {price} บาท")
# วนเอาเฉพาะค่า
for price in prices.values():
print(price)ผลลัพธ์ของ items():
กาแฟ ราคา 45 บาท
ชา ราคา 40 บาท
ขนมปัง ราคา 25 บาทเมท็อดที่ควรรู้
prices = {"กาแฟ": 45, "ชา": 40, "ขนมปัง": 25}
print(list(prices.keys())) # ['กาแฟ', 'ชา', 'ขนมปัง']
print(list(prices.values())) # [45, 40, 25]
print(len(prices)) # 3
print(sum(prices.values())) # 110นับจำนวนด้วยดิกชันนารี
รูปแบบที่เจอบ่อยมาก: นับว่าอะไรปรากฏกี่ครั้ง
text = "กขกคกขงกค"
count = {}
for ch in text:
count[ch] = count.get(ch, 0) + 1
print(count) # {'ก': 4, 'ข': 2, 'ค': 2, 'ง': 1}count.get(ch, 0) + 1 อ่านว่า “เอาจำนวนเดิมของ ch (ถ้ายังไม่มีให้เป็น 0) แล้วบวก 1”
ดิกชันนารีซ้อน
ค่าของ dict เป็น dict อีกชั้นได้ เหมาะกับข้อมูลที่มีโครงสร้าง
students = {
"s001": {"name": "สมชาย", "gpa": 3.4},
"s002": {"name": "สมหญิง", "gpa": 3.8},
}
print(students["s002"]["name"]) # สมหญิง
for sid, info in students.items():
print(f"{sid}: {info['name']} (GPA {info['gpa']})")ตัวอย่างรวม: ระบบสั่งอาหารอย่างง่าย
menu = {"ข้าวผัด": 50, "ผัดไทย": 60, "ต้มยำ": 80}
order = {}
print("=== เมนู ===")
for name, price in menu.items():
print(f"{name} - {price} บาท")
print("\nสั่งอาหาร (พิมพ์ done เพื่อจบ)")
while True:
choice = input("เมนู: ")
if choice == "done":
break
if choice in menu:
order[choice] = order.get(choice, 0) + 1
else:
print("ไม่มีเมนูนี้")
print("\n=== สรุปรายการ ===")
total = 0
for name, qty in order.items():
subtotal = menu[name] * qty
total += subtotal
print(f"{name} x{qty} = {subtotal} บาท")
print(f"รวมทั้งสิ้น {total} บาท")ผลลัพธ์:
สั่งอาหาร (พิมพ์ done เพื่อจบ)
เมนู: ข้าวผัด
เมนู: ข้าวผัด
เมนู: ต้มยำ
เมนู: done
=== สรุปรายการ ===
ข้าวผัด x2 = 100 บาท
ต้มยำ x1 = 80 บาท
รวมทั้งสิ้น 180 บาทเช็คความเข้าใจก่อนข้ามบท
- สร้าง dict และเข้าถึงค่าด้วย key ได้
- เลือกใช้
.get()เมื่อไม่แน่ใจว่ามี key นั้นหรือไม่ - ลองนับจำนวนคำในประโยคหนึ่งประโยคด้วย dict
สรุป
- ดิกชันนารีเก็บข้อมูลเป็นคู่
คีย์: ค่าค้นด้วยคีย์ได้ทันที []เข้าถึงแบบต้องมีคีย์,get()เข้าถึงแบบปลอดภัยมี default- กำหนดค่าให้คีย์ใหม่ = เพิ่ม, คีย์เดิม = แก้
.items()วนเอาคู่คีย์–ค่า เป็นรูปแบบที่ใช้บ่อยสุดdict.get(key, 0) + 1เป็นสำนวนมาตรฐานสำหรับนับจำนวน
บทถัดไปเป็น Comprehension วิธีสร้างลิสต์และดิกชันนารีแบบสั้นในบรรทัดเดียว