ดิกชันนารีและเซตใน Python
สำรวจการสร้างดิกชันนารีและเซต การทดสอบสมาชิก และรูปแบบที่พบบ่อย เช่น การนับความถี่ด้วย collections.Counter
ดิกชันนารีและเซตใน Python เป็นบทเรียน DSA Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DSA Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DSA Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
ดิกชันนารีใน Python: ที่เก็บคู่คีย์-ค่า
ดิกชันนารี ใน Python จับคู่คีย์กับค่า โดยการค้นหา การเพิ่ม และการลบใช้เวลาเฉลี่ย O(1) ดิกชันนารีเป็นกลไกเบื้องหลังโจทย์ผลรวมสองจำนวน การตรวจสอบแอนนาแกรม และการนับความถี่ โค้ดนี้แสดงวิธีใช้งาน
d = {'apple': 3, 'banana': 5}
print(d['apple']) # 3
d['cherry'] = 7
print(len(d)) # 3
print('banana' in d) # True
del d['apple']
print(d) # {'banana': 5, 'cherry': 7}การค้นหาอย่างปลอดภัยด้วย .get()
การอ่านคีย์ที่ไม่มีอยู่ด้วย d[key] จะทำให้โปรแกรมล้มเหลวด้วย KeyError ให้ใช้ d.get(key, default) เพื่อคืนค่า fallback แทน ซึ่งเป็นแนวทางที่ปลอดภัยและช่วยหลีกเลี่ยงข้อผิดพลาดระหว่างทำงานที่ไม่คาดคิด
freq = {}
words = ['the', 'cat', 'sat', 'on', 'the', 'mat']
for w in words:
freq[w] = freq.get(w, 0) + 1
print(freq)
# {'the': 2, 'cat': 1, 'sat': 1, 'on': 1, 'mat': 1}
print(freq.get('dog', 0)) # 0 (no KeyError)ใช้ defaultdict เพื่อจัดกลุ่มให้กระชับขึ้น
defaultdict(list) จะสร้างลิสต์ว่างให้คีย์ใหม่โดยอัตโนมัติ ทำให้โจทย์การจัดกลุ่มไม่ต้องเขียนโค้ดซ้ำ ๆ ส่วน defaultdict(int) จะเริ่มค่าของทุกคีย์ที่ 0 จึงเหมาะสำหรับการนับ
from collections import defaultdict
groups = defaultdict(list)
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
for w in words:
key = ''.join(sorted(w)) # canonical anagram key
groups[key].append(w)
print(list(groups.values()))
# [['eat','tea','ate'], ['tan','nat'], ['bat']]Counter: แผนที่ความถี่ความเร็วสูง
Counter คือดิกชันนารีที่สร้างมาเพื่อการนับโดยเฉพาะ เพียงส่งสิ่งที่วนซ้ำได้ชนิดใดก็ได้เข้าไป ก็จะได้แผนที่ความถี่ทันที most_common(k) จะคืน k อันดับแรก โค้ดนี้แสดงการตรวจสอบแอนนาแกรม
from collections import Counter
c = Counter('abracadabra')
print(c) # Counter({'a':5,'b':2,'r':2,'c':1,'d':1})
print(c.most_common(2)) # [('a', 5), ('b', 2)]
# Valid anagram check
def is_anagram(s, t):
return Counter(s) == Counter(t)
print(is_anagram('anagram', 'nagaram')) # Trueเซตใน Python: กลุ่มข้อมูลไม่เรียงลำดับที่ไม่ซ้ำกัน
เซต เก็บสมาชิกที่ไม่ซ้ำกัน และตรวจสอบการมีสมาชิกอยู่ได้ในเวลา O(1) ใช้ {1, 2, 3} หรือ set(iterable) ได้ แต่ {} จะสร้างดิกชันนารี ดังนั้นให้ใช้ set() สำหรับเซตว่าง เซตเหมาะอย่างยิ่งสำหรับตรวจหาข้อมูลซ้ำ
seen = set()
nums = [1, 2, 3, 2, 1, 4]
duplicates = []
for n in nums:
if n in seen: # O(1) check
duplicates.append(n)
seen.add(n)
print(duplicates) # [2, 1]
print(len(seen)) # 4 (unique values)การดำเนินการกับเซตสำหรับการสัมภาษณ์
เซตทำงานเชิงคณิตศาสตร์ได้: | คือยูเนียน & คืออินเตอร์เซกชัน - คือผลต่าง และ ^ คือผลต่างสมมาตร การดำเนินการเหล่านี้แก้โจทย์ลักษณะ "สมาชิกที่มีร่วมกัน" ได้ในบรรทัดเดียว
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # {1, 2, 3, 4, 5, 6} union
print(a & b) # {3, 4} intersection
print(a - b) # {1, 2} difference
print(a ^ b) # {1, 2, 5, 6} symmetric diffการตรวจสอบสมาชิก: ลิสต์เทียบกับเซต
โครงสร้างข้อมูลที่เลือกมีผลต่อความเร็ว การตรวจสอบ in ในลิสต์ใช้เวลา O(n) แต่ในเซตใช้เวลา O(1) การแปลงลิสต์เป็นเซตก่อนค้นหาซ้ำหลายครั้งเป็นวิธีเพิ่มความเร็วที่ใช้กันทั่วไป
word_list = ['apple', 'banana', 'cherry', 'date']
word_set = set(word_list)
# O(n) per check
print('banana' in word_list) # True
# O(1) per check
print('banana' in word_set) # True
# Practical example: find common elements
a = [1, 2, 3, 4, 5]
b = [3, 4, 5, 6, 7]
common = [x for x in a if x in set(b)]
print(common) # [3, 4, 5]การวนซ้ำผ่านดิกชันนารี: คีย์ ค่า และรายการ
วนลูปผ่านดิกชันนารีด้วย .keys() .values() หรือ .items() ห้ามลบคีย์ระหว่างวนลูป — ให้รวบรวมคีย์ไว้ในลิสต์ก่อน แล้วจึงลบภายหลัง ดูตัวอย่างในโค้ด
scores = {'Alice': 90, 'Bob': 75, 'Carol': 88}
for name, score in scores.items():
print(f'{name}: {score}')
# Find key with max value
best = max(scores, key=scores.get)
print(best) # Alice
# Safe deletion
to_del = [k for k, v in scores.items() if v < 80]
for k in to_del:
del scores[k]
print(scores) # {'Alice': 90, 'Carol': 88}Frozenset: เซตที่แฮชได้
frozenset คือเซตที่เปลี่ยนแปลงไม่ได้ จึงใช้เป็นคีย์ของดิกชันนารีหรืออยู่ภายในเซตอื่นได้ เหมาะสำหรับจัดกลุ่มแอนนาแกรมตามชุดตัวอักษร โดยไม่ต้องสนใจลำดับ
from collections import defaultdict
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
groups = defaultdict(list)
for w in words:
key = frozenset(w) # hashable; 'eat','tea','ate' all share same key
groups[key].append(w)
print([sorted(g) for g in groups.values()])
# [['ate','eat','tea'], ['nat','tan'], ['bat']]การสร้างดิกชันนารีแบบย่อสำหรับการแปลงข้อมูล
การสร้างดิกชันนารีแบบย่อ สามารถสร้างการจับคู่ได้ในบรรทัดเดียว: {k: v for ...} เหมาะสำหรับการสลับคีย์กับค่าในดิกชันนารีหรือกรองคู่ข้อมูล โปรดทราบว่าการสลับเช่นนี้ต้องอาศัยค่าที่ไม่ซ้ำกัน ดูตัวอย่างในโค้ด
# Invert a dict
original = {'a': 1, 'b': 2, 'c': 3}
inverted = {v: k for k, v in original.items()}
print(inverted) # {1:'a', 2:'b', 3:'c'}
# Filter by value
scores = {'Alice': 90, 'Bob': 55, 'Carol': 78}
passing = {k: v for k, v in scores.items() if v >= 60}
print(passing) # {'Alice': 90, 'Carol': 78}ลำดับตัวเลขต่อเนื่องที่ยาวที่สุด
เซตช่วยแก้โจทย์ ลำดับตัวเลขต่อเนื่องที่ยาวที่สุด ได้ในเวลา O(n): ใส่ตัวเลขทั้งหมดลงในเซต จากนั้นเริ่มนับต่อเฉพาะตัวเลขที่ไม่มีตัวเลขก่อนหน้าอยู่ในเซต ไม่จำเป็นต้องเรียงลำดับ
def longest_consecutive(nums):
num_set = set(nums)
best = 0
for n in num_set:
if n - 1 not in num_set: # start of sequence
cur = n
streak = 1
while cur + 1 in num_set:
cur += 1
streak += 1
best = max(best, streak)
return best
print(longest_consecutive([100,4,200,1,3,2])) # 4 (1,2,3,4)ตรวจสอบความเข้าใจอย่างรวดเร็ว
ตรวจสอบความเข้าใจอย่างรวดเร็ว — มาดูกันว่าแนวคิดเรื่องดิกชันนารีและเซตจากบทเรียนนี้ติดตัวคุณมากแค่ไหน เชื่อสัญชาตญาณของคุณได้เลย 🎯
ทบทวนบทเรียน
สรุป: ดิกชันนารี ให้การค้นหาในเวลา O(1) สำหรับการนับและการจัดกลุ่ม Counter และ defaultdict ช่วยลดโค้ดซ้ำ ๆ และ เซต เปลี่ยนการสแกนในเวลา O(n) ให้เป็นการตรวจสอบในเวลา O(1)
คำถามที่พบบ่อย
บทเรียน “ดิกชันนารีและเซตใน Python” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ดิกชันนารีและเซตใน Python” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DSA Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DSA Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ดิกชันนารีและเซตใน Python”
สำรวจการสร้างดิกชันนารีและเซต การทดสอบสมาชิก และรูปแบบที่พบบ่อย เช่น การนับความถี่ด้วย collections.Counter คุณปฏิบัติ DSA Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DSA Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DSA Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ดิกชันนารีและเซตใน Python” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DSA Interview Prep นี้ได้ไหม
ได้ บทเรียน DSA Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ลิสต์ ทูเพิล และการตัดแบ่ง
- ดิกชันนารีและเซตใน Python
- การสร้างข้อมูลแบบย่อและฟังก์ชันในตัว
- ฟังก์ชัน คลอเชอร์ และแลมบ์ดา