정처기 감자정처기 감자
Python자료구조

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

딕셔너리 (Dictionary)

코딩Python
읽는데 11분 소요
처음 쓰인 날: 2026-04-11
마지막 수정일: 2026-09-27
조회수: —
선수학습(1개)
  • Python 자료형(int, float, str, tuple)

요약

Python 딕셔너리 생성·접근·메서드(items/values/get)·빈도 카운팅·컴프리헨션까지. 정보처리기사 실기에 출제되는 딕셔너리 핵심 개념을 정리합니다.

딕셔너리 핵심 정리

개념설명예시
딕셔너리 생성키-값 쌍으로 데이터 저장d = {"a": 1, "b": 2}
딕셔너리 접근키를 사용하여 값 조회d["a"] → 1
keys / values / items키·값·쌍을 차례대로 꺼내기d.items() → [('a',1), ...]
get(key, default)키가 없으면 기본값 반환d.get("x", 0) → 0
sum / len값의 합과 항목 수 집계sum(d.values()), len(d)
딕셔너리 컴프리헨션반복문으로 딕셔너리 생성{i: i*2 for i in lst}

딕셔너리 기초

딕셔너리(Dictionary) 는 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료구조입니다. 키를 통해 값에 빠르게 접근할 수 있습니다.

딕셔너리 생성

python
코드 하이라이팅 중…

딕셔너리 접근 및 수정

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
python
코드 하이라이팅 중…
딕셔너리 d에서 이미 있는 키 age에 대입하면 값만 25에서 30으로 바뀌고, 없는 키 score에 대입하면 score: 95 쌍이 맨 뒤에 추가되는 3단계 변화
있는 키에 대입하면 값만 바뀌고, 없는 키에 대입하면 새 키-값 쌍이 맨 뒤에 추가됩니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

키 목록과 값 목록 조회

keys()·values()·items()의 결과는 list()로 감싸 리스트로 바꿔 출력하는 경우가 많습니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
딕셔너리 d의 키 열에서 list(d.keys())의 ['a', 'b', 'c'], 값 열에서 list(d.values())의 [1, 2, 3], 키와 값 쌍 전체에서 list(d.items())의 [('a', 1), ('b', 2), ('c', 3)]가 만들어지는 과정을 색으로 대응한 다이어그램
keys()는 키만, values()는 값만, items()는 (키, 값) 튜플을 꺼내며, list()로 감싸면 넣은 순서 그대로 리스트가 됩니다
list() 없이 그대로 출력하면?

keys()·values()·items()는 리스트가 아니라 dict_keys·dict_values·dict_items라는 별도 객체를 돌려줍니다. 그래서 list()로 감싸지 않고 출력하면 객체 이름이 앞에 붙어 나옵니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

이 객체들은 이터러블이라 for문으로 하나씩 꺼내거나 sum()에 바로 넣을 수 있고, len()으로 개수도 셀 수 있습니다. 그래서 순회하거나 합계를 구할 때는 list()로 바꿀 필요가 없습니다.

enumerate()를 활용하면 반복문에서 인덱스와 값을 동시에 얻을 수 있습니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

딕셔너리 메서드로 순회하기

keys()·values()·items()는 각각 키만, 값만, 키와 값 쌍을 하나씩 꺼내주는 메서드입니다. for문과 결합하면 딕셔너리 전체를 훑으면서 작업을 할 수 있습니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
딕셔너리 d의 items()가 ('a', 1), ('b', 2), ('c', 3) 튜플을 넣은 순서대로 꺼내고, 각 튜플이 k와 v로 분해되어 a 1, b 2, c 3이 출력되는 과정
items()는 (키, 값) 튜플을 넣은 순서대로 하나씩 꺼내고, for k, v가 튜플의 [0]을 k에, [1]을 v에 나눠 담습니다

items()의 결과는 (키, 값) 튜플 묶음입니다. for k, v in d.items()처럼 두 변수로 받으면 튜플이 자동으로 분해되어 k에는 키, v에는 값이 들어갑니다.

출력이 a → b → c 순서로 나오는 것은 딕셔너리가 키를 넣은 순서를 기억하기 때문입니다. Python 3.7부터 언어 규칙으로 보장되는 동작이라, keys()·values()·items()로 순회하거나 print(d)로 출력해도 항상 넣은 순서대로 나옵니다. 이미 있는 키의 값을 바꿔도 순서는 그대로입니다.

딕셔너리를 그대로 순회하면 키가 나옵니다

메서드 없이 딕셔너리를 for에 그대로 넣으면 값이 아니라 키만 꺼내집니다. list(), sorted()처럼 이터러블을 받는 함수에 그대로 넣어도 마찬가지입니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

값이 필요하면 d.values(), 키와 값이 모두 필요하면 d.items()를 넣습니다.

for k in d는 값이 아니라 키를 꺼냅니다
sum(d)는 키를 더하고, sum(d.values())가 값을 더합니다. 딕셔너리를 함수에 넣을 때는 키가 필요한지 값이 필요한지 먼저 확인하세요.

sum(d.values()) — 값의 합 집계

sum()은 이터러블의 모든 값을 더해주는 내장 함수입니다. values()가 값만 꺼내주므로 sum(d.values()) 하나로 딕셔너리 전체 값의 합계를 구할 수 있습니다.

python
코드 하이라이팅 중…
score 딕셔너리의 값 90, 85, 95를 score.values()로 꺼내 sum()으로 더한 total 270과 len(score)로 센 쌍 3개인 count 3, avg = total / count로 구한 avg 90.0을 보여주는 다이어그램
sum(score.values())는 값만 더해 270, len(score)는 키-값 쌍 3개를 세어 3, 나눗셈 결과인 avg는 실수 90.0입니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
표현식꺼내는 값결과
sum(d.values())값만값 전체의 합
sum(d.keys())키만 (숫자 키일 때)키 전체의 합
len(d)—키-값 쌍의 개수
len(d)는 '쌍의 개수'입니다
len(딕셔너리)는 키 개수, 즉 키-값 쌍의 개수를 돌려줍니다. len(d.values())·len(d.keys())·len(d.items())도 모두 같은 값입니다. 값의 개수를 따로 세고 싶어도 결국 쌍의 개수와 같기 때문에 len(d) 한 번만 쓰면 됩니다.

get(key, default) — 키가 없을 때 기본값 반환

딕셔너리에서 값을 꺼낼 때 d["x"]처럼 대괄호로 접근하면 키가 없을 경우 KeyError가 발생합니다. get() 메서드는 키가 있으면 값을, 없으면 미리 정해 둔 기본값을 돌려줍니다.

python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
딕셔너리 d에 'a'와 'b'만 있을 때, 있는 키 'a'는 세 방식 모두 1을 반환하고 없는 키 'x'는 d['x']가 KeyError, d.get('x')가 None, d.get('x', 0)이 0을 반환하는 분기 다이어그램
같은 'x' 조회라도 d['x']는 KeyError, get()은 기본값(None 또는 지정한 값)을 반환합니다

여기서 "키가 없다"는 것은 그 키를 딕셔너리에 아직 넣은 적이 없다는 뜻입니다. 위 예시의 d에는 "a"와 "b"만 들어 있으므로 "x"는 없는 키입니다. 실기에서는 빈 딕셔너리 {}에서 출발해 값을 하나씩 채워 가는 코드가 많은데, 이때 처음 만나는 키는 아직 딕셔너리에 없습니다. 아래 빈도수 카운팅 패턴이 대표적인 예입니다.

접근 방식키 있을 때키 없을 때
d[key]값 반환KeyError 발생
d.get(key)값 반환None 반환
d.get(key, default)값 반환default 반환

빈도수 카운팅 패턴

get(key, default)의 가장 큰 쓰임새는 빈도수 카운팅입니다. 문자열이나 리스트를 순회하며 각 요소가 몇 번 등장하는지 세는 패턴에서, d[key] = d.get(key, 0) + 1 한 줄로 "처음 본 키는 0에서 시작, 이미 본 키는 기존 값에 +1"을 표현할 수 있습니다.

python
코드 하이라이팅 중…
문자열 banana의 글자를 차례로 세면서 freq 딕셔너리가 'b': 1에서 'b': 1, 'a': 3, 'n': 2로 자라는 6단계 그림
처음 보는 글자는 get이 0을 돌려줘 새 쌍이 맨 뒤에 추가되고, 이미 본 글자는 자리는 그대로 두고 값만 1씩 늘어납니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

한 줄씩 풀어 보면 다음과 같습니다.

반복chfreq.get(ch, 0)freq[ch] = ... 이후 freq
1b0 (없음){'b': 1}
2a0 (없음){'b': 1, 'a': 1}
3n0 (없음){'b': 1, 'a': 1, 'n': 1}
4a1{'b': 1, 'a': 2, 'n': 1}
5n1{'b': 1, 'a': 2, 'n': 2}
6a2{'b': 1, 'a': 3, 'n': 2}

get이 없다면 "키가 있으면 +1, 없으면 1로 초기화" 두 가지 경우를 if-else로 나누어 써야 합니다. get(ch, 0) 덕분에 첫 등장도 초기값 0에서 출발하므로 분기 없이 한 줄로 끝납니다.

python
코드 하이라이팅 중…

빈도 + 집계 결합

빈도 딕셔너리를 만든 뒤 sum(d.values())로 전체 글자 수를, len(d)로 서로 다른 글자의 종류 수를 한꺼번에 구할 수 있습니다.

python
코드 하이라이팅 중…
banana의 빈도 딕셔너리 freq에서 sum(freq.values())는 1+3+2=6으로 전체 글자 수, len(freq)는 3으로 서로 다른 글자 b·a·n의 개수가 되는 과정
값을 모두 더하면 전체 글자 수(6), 키-값 쌍을 세면 서로 다른 글자의 개수(3)가 됩니다
python
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
get(key)만 쓰면 기본값은 None입니다
d.get(key)는 두 번째 인자를 생략하면 키가 없을 때 None을 돌려줍니다. 빈도 카운팅처럼 기본값이 숫자여야 하는 상황에서는 d.get(ch, 0)처럼 0을 반드시 함께 써야 합니다. None + 1은 TypeError가 납니다.

딕셔너리 컴프리헨션

딕셔너리 컴프리헨션 은 반복문과 조건식을 사용하여 딕셔너리를 한 줄로 생성하는 문법입니다. 기본 형식·예시·조건 필터링, 그리고 리스트·집합·제너레이터 컴프리헨션과의 비교(같은 중괄호도 콜론 유무로 딕셔너리·집합이 갈리는 포인트)는 컴프리헨션 통합 정리 페이지에서 한 자리에 정리합니다.


정보처리기사 실기 기출 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(2개)
  • 집합 (Set)
  • Python 컴프리헨션 통합 정리
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999