Coding Interview Prep · 강의

Python의 딕셔너리와 집합

dict와 set의 생성, 멤버십 검사, collections.Counter로 빈도를 세는 일반적인 패턴을 살펴봅니다.

레슨 2/413개 단계

Python의 딕셔너리와 집합은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

파이썬 딕셔너리: 키-값 저장소

파이썬 딕셔너리는 키를 값에 연결하며, 평균적으로 조회, 삽입, 삭제를 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)를 사용해 대체값을 반환하십시오. 예상하지 못한 실행 시간 오류를 피할 수 있는 안전한 습관입니다.

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

파이썬 집합: 순서가 없고 중복이 없는 모음

집합은 중복되지 않는 항목을 저장하며 포함 여부 검사를 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) 검사로 바꿔 줍니다.

무료로 시작

AI 튜터와 함께 Coding Interview Prep을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
90
레슨
360

자주 묻는 질문

“Python의 딕셔너리와 집합” 강의는 무료인가요?

네 — “Python의 딕셔너리와 집합” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“Python의 딕셔너리와 집합”에서 뭘 배우나요?

dict와 set의 생성, 멤버십 검사, collections.Counter로 빈도를 세는 일반적인 패턴을 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Python의 딕셔너리와 집합” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 리스트, 튜플, 슬라이싱
  2. Python의 딕셔너리와 집합
  3. 컴프리헨션과 내장 함수
  4. 함수, 클로저, 람다
← Coding Interview Prep(으)로 돌아가기