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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Counter
- defaultdict
- deque
- namedtuple และ OrderedDict