0Pricing
Python Academy · บทเรียน

defaultdict

เริ่มต้นค่าพจนานุกรมโดยอัตโนมัติ

defaultdict เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

ปัญหาคีย์ที่หายไป

สำหรับ dict ทั่วไป การเข้าถึงคีย์ที่ไม่มีอยู่จะส่งข้อผิดพลาด KeyError ซึ่งน่ารำคาญเมื่อคุณต้องการสะสมค่าเพิ่มขึ้นทีละน้อย

d = {}
try:
    d['x'].append(1)
except KeyError as e:
    print('KeyError:', e)

พบกับ defaultdict

defaultdict จาก collections รับฟังก์ชันสร้างค่าเริ่มต้น ซึ่งสร้างค่าเริ่มต้นให้กับคีย์ที่ไม่มีอยู่ นำเข้าโดยใช้ from collections import defaultdict

from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))

การนับด้วย int

เมื่อใช้ defaultdict(int) คีย์ที่ไม่มีอยู่จะมีค่าเริ่มต้นเป็น 0 คุณจึงเพิ่มค่าได้โดยไม่ต้องตรวจสอบก่อน

from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
    counts[ch] += 1
print(dict(counts))

การจัดกลุ่มด้วย list

defaultdict(list) จะสร้างรายการว่างสำหรับคีย์ใหม่ เหมาะอย่างยิ่งสำหรับการจัดกลุ่มรายการลงในกลุ่มย่อย

from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
    groups[w[0]].append(w)
print(dict(groups))

การรวบรวมด้วย set

ใช้ defaultdict(set) เมื่อต้องการค่าไม่ซ้ำกันสำหรับแต่ละคีย์ ค่าซ้ำจะถูกตัดออกโดยอัตโนมัติ

from collections import defaultdict
seen = defaultdict(set)
pairs = [('a', 1), ('a', 1), ('a', 2), ('b', 3)]
for k, v in pairs:
    seen[k].add(v)
print(dict(seen))

โรงงานต้องเรียกใช้งานได้

อาร์กิวเมนต์ต้องเป็นสิ่งที่เรียกใช้งานได้ ซึ่งรับอาร์กิวเมนต์เป็นศูนย์ตัวและคืนค่าเริ่มต้น int, list, set และ dict ล้วนใช้ได้ เพราะเมื่อเรียกใช้จะคืนค่าเปล่า

from collections import defaultdict
print(int())
print(list())
print(set())

ค่าเริ่มต้นแบบกำหนดเองด้วย lambda

คุณสามารถส่งสิ่งที่เรียกใช้งานได้ซึ่งไม่รับอาร์กิวเมนต์ชนิดใดก็ได้ เช่น lambda เพื่อคืนค่าเริ่มต้นแบบกำหนดเอง

from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))

defaultdict แบบซ้อนกัน

โรงงานสามารถสร้าง defaultdict ขึ้นมาเองได้ ทำให้คุณสร้างโครงสร้างแบบซ้อนกันโดยไม่ต้องตั้งค่าด้วยตนเอง

from collections import defaultdict
table = defaultdict(lambda: defaultdict(int))
table['fruit']['apples'] += 3
table['fruit']['pears'] += 2
print(table['fruit']['apples'])
print(table['fruit']['pears'])

การเข้าถึงจะสร้างคีย์

โปรดทราบว่า เพียงแค่อ่านคีย์ที่ไม่มีอยู่ก็จะทำการแทรกคีย์นั้นพร้อมค่าเริ่มต้น หลังจากเข้าถึงแล้ว คีย์ดังกล่าวจะมีอยู่ในพจนานุกรม

from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))

การตรวจสอบโดยไม่แทรกคีย์

หากต้องการตรวจสอบคีย์โดยไม่สร้างคีย์ ให้ใช้เมธอด .get() หรือตัวดำเนินการ in ซึ่งจะไม่เรียกใช้โรงงาน

from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))

การแปลงกลับเป็น dict

ครอบ defaultdict ด้วย dict() เมื่อต้องการพจนานุกรมทั่วไป เช่น ก่อนส่งค่ากลับจากฟังก์ชันหรือก่อนพิมพ์ให้ดูสะอาดตา

from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)

ตรวจสอบความเข้าใจ

อาร์กิวเมนต์ที่ส่งให้ defaultdict แทนสิ่งใด

ทบทวน: defaultdict

ประเด็นสำคัญ:

  • defaultdict(factory) จะสร้างค่าให้อัตโนมัติสำหรับคีย์ที่ไม่มีอยู่
  • int ให้ค่า 0 (การนับ) list ให้ค่า [] (การจัดกลุ่ม) และ set ให้เซตว่าง (การจัดกลุ่มแบบไม่ซ้ำ)
  • โรงงานคือสิ่งที่เรียกใช้งานได้โดยไม่รับอาร์กิวเมนต์ชนิดใดก็ได้ รวมถึง lambda
  • การอ่านคีย์ที่ไม่มีอยู่จะแทรกคีย์นั้น ให้ใช้ .get() หรือ in เพื่อตรวจดูอย่างปลอดภัย
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
    g[w[0]].append(w)
print(dict(g))

คำถามที่พบบ่อย

บทเรียน “defaultdict” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “defaultdict” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “defaultdict”

เริ่มต้นค่าพจนานุกรมโดยอัตโนมัติ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “defaultdict” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple และ OrderedDict
← กลับไปที่ Python Academy