0Pricing
Coding Interview Prep · บทเรียน

ดิกชันนารีและเซตใน Python

สำรวจการสร้างดิกชันนารีและเซต การทดสอบสมาชิก และรูปแบบที่พบบ่อย เช่น การนับความถี่ด้วย collections.Counter

ดิกชันนารีและเซตใน Python เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding 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) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ดิกชันนารีและเซตใน Python”

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

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

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

บทเรียน “ดิกชันนารีและเซตใน Python” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ลิสต์ ทูเพิล และการตัดแบ่ง
  2. ดิกชันนารีและเซตใน Python
  3. การสร้างข้อมูลแบบย่อและฟังก์ชันในตัว
  4. ฟังก์ชัน คลอเชอร์ และแลมบ์ดา
← กลับไปที่ Coding Interview Prep