7. 딕셔너리와 셋 (dict / set)
딕셔너리 (dict) — 이름표(key)로 값을 찾기
리스트는 번호(0,1,2...)로 찾지만, 딕셔너리는 key(열쇠)로 값을 찾습니다.
scores = {"철수": 90, "영희": 85, "민수": 70}
print(scores["영희"]) # 출력: 85
scores["철수"] = 100 # 값 변경
scores["지수"] = 95 # 새 항목 추가
print(scores) # 출력: {'철수': 100, '영희': 85, '민수': 70, '지수': 95}
get — 없는 key를 안전하게 조회
scores = {"철수": 90}
# print(scores["영희"]) ← 없는 key라 에러 발생!
print(scores.get("영희")) # 출력: None (에러 대신 None)
print(scores.get("영희", 0)) # 출력: 0 (없으면 0으로 (기본값 지정))
개수 세기 패턴 (아주 자주 나옴)
text = "banana"
count = {}
for ch in text:
count[ch] = count.get(ch, 0) + 1 # 있으면 +1, 없으면 0에서 시작
print(count) # 출력: {'b': 1, 'a': 3, 'n': 2}
셋 (set) — 중복 없는 모음
순서가 없고, 같은 값은 하나만 담깁니다. "중복 제거"와 "빠른 포함 검사"에 씁니다.
nums = [1, 2, 2, 3, 3, 3, 4]
unique = set(nums)
print(unique) # 출력: {1, 2, 3, 4} (중복이 사라짐)
print(len(unique)) # 출력: 4 (종류가 몇 개?)
print(3 in unique) # 출력: True (들어있는지 검사 — 아주 빠름)
💡 딕셔너리는 "무엇이 몇 번 나왔나", "이름으로 정보 찾기"에 필수입니다. 셋은 "중복 제거"와 "이미 방문했나?" 같은 검사에 씁니다.
in검색이 리스트보다 훨씬 빨라요.