GDGoC/Python

[Python] Basic #04: 딕셔너리 (Dictionary)

Opal1031 2026. 5. 11. 17:47

Python에서 핵심 자료구조 중 하나인 딕셔너리에 대해 다룹니다.

 

딕셔너리의 기초 문법부터 주요 메서드 및 기능까지 함께 살펴보겠습니다.


1. 딕셔너리 (Dictionary)

딕셔너리는 데이터를 Key-Value쌍으로 저장하며, 여러 값들을 효과적으로 관리할 수 있는 자료구조입니다.

 

Key
데이터를 식별할 수 있는 고유 값

 

Value
Key와 연결된 데이터

 

리스트 (List) vs 딕셔너리 (Dictionary)

 

딕셔너리 생성 및 기본 사용법

# 딕셔너리 생성
info = {"name": "Alice", "age": 25}

# 값 접근
print(info["name"])  # 출력: Alice

# 값 수정
info["age"] = 26
print(info["age"])  # 출력: 26

 


2. 딕셔너리 주요 메서드 및 기능

딕셔너리가 기본적으로 제공하는 몇 가지 유용한 메서드를 알아봅시다.

 

.keys(), .values(), .items()

딕셔너리에 포함되는 값들에 대한 직접적인 접근을 하는 메서드입니다.

info = {"name": "Alice", "age": 25}

print(info.keys())   # dict_keys(['name', 'age'])
print(info.values()) # dict_values(['Alice', 25])
print(info.items())  # dict_items([('name', 'Alice'), ('age', 25)])

 

.get()을 사용한 안전한 키 접근

키가 존재하지 않을 때 기본값을 반환하도록 설정합니다.

 

이를 통해 KeyError 예외를 방지하고, 안전하게 기본값(default)을 반환받아 프로그램의 안정성과 보안성을 높일 수 있습니다.

print(info.get("city", "Unknown"))  # 출력: Unknown
  • 찾고자 하는 key(city)가 있으면 값을 출력하고, 없으면 기본값(Unknown)을 출력합니다.

 

항목 추가/수정/삭제
각 값에 대한 데이터 관리를 키를 이용하여 처리할 수 있습니다.

info[“key”] = value        # 값 수정
del info[“key”]            # 값 삭제

 

in 키워드를 이용한 키 확인
특정 키가 딕셔너리에 존재하는지 확인할 수 있습니다.

if "name" in info:
    print("Key exists!")

3. 딕셔너리 활용

딕셔너리 컴프리헨션 (Dictionary Comprehension)

딕셔너리를 빠르고 간결하게 생성할 수 있는 파이썬 만의 문법입니다.

# 리스트 데이터를 딕셔너리로 변환

students = [{"name": "Alice", "score": 85}, {"name": "Bob", "score": 90}]
scores = {s["name"]: s["score"] for s in students}

print(scores)  # 출력: {'Alice': 85, 'Bob': 90}

 

이미 리스트라는 형태로 데이터가 존재하는데 딕셔너리로 변환하는 이유는 다음과 같습니다.

  • 검색 속도: 키(key)를 알면 데이터의 양과 상관없이 즉시 값을 찾음
  • 데이터 간의 관계(의미) 표현: 두 개 이상의 정보를 한 쌍으로 묶어 데이터의 관계를 명확히 정의
  • 데이터 수정과 관리의 편리함: 리스트에서 인덱스 번호를 알아낼 필요없이 바로 접근 가능

 

데이터 분류와 집계

# 문자열에서 각 알파벳의 빈도수 세기

text = "hello world"
freq = {}

for char in text:
    if char in freq:
        freq[char] += 1

    else:
        freq[char] = 1

print(freq)  # 출력: {'h': 1, 'e': 1, 'l': 3, 'o': 2, ...}

4. 딕셔너리 활용 패턴

문자열에서 각 문자 개수 세기

text = "hello world"
freq = {}

for char in text:
    freq[char] = freq.get(char, 0) + 1

print(freq) # 출력: {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}

 

값 기준 정렬하기

scores = {"Alice": 85, "Bob": 90, "Charlie": 80}

# 딕셔너리를 값 기준으로 내림차순 정렬
sorted_scores = dict(sorted(scores.items(), key = lambda x: x[1], reverse = True))

print(sorted_scores)
# 출력: {'Bob': 90, 'Alice': 85, 'Charlie': 80}

 

두 배열의 공통 요소 찾기

# 배열 두 개
arr1 = [1, 2, 3, 4, 5]
arr2 = [3, 4, 5, 6, 7]

# 딕셔너리로 배열 1의 모든 값을 저장
map_dict = {x: True for x in arr1}

# 배열 2를 순회하며 공통 요소 찾아내기
common_elements = [x for x in arr2 if x in map_dict]

print(common_elements)
# 출력: [3, 4, 5]

 

Two Sum

합이 target이 되는 두 숫자의 인덱스를 찾는 전형적인 코딩 테스트 문제입니다.


내가 필요한 숫자(diff)가 이미 나온 적 있는지 확인하는 동시에 현재 숫자와 그 위치를 기록하는 방식입니다.

nums = [2, 7, 11, 15]
target = 9

num_dict = {}

for i, num in enumerate(nums):
    diff = target - num

    if diff in num_dict:  # 이전에 봤던 숫자가 현재 값의 차이(diff)라면 인덱스 반환
        print([num_dict[diff], i])

        break

    num_dict[num] = i

# 출력: [0, 1]