[Python] 딕셔너리(Dictionary) 문법

2025. 3. 29. 15:02·WIL

딕셔너리(Dictionary)란

파이썬에서 dictionary는 key: value 쌍 으로 이루어진 자료구조. 해시 테이블로 구현되어있어 효율적으로 키를 통해 값을 조회할 수 있음

장단점

기본적으로 해시테이블의 장단점과 거의 같다

  • 장점
    1. 평균적으로 데이터 접근/ 삽입 속도가 O(1)
    2. 키로 직관적인 접근이 가능
  • 단점
    1. 해시테이블 구조를 사용하기때문에 메모리 사용량이 많아질 수 있다.
    2. 해시 충돌로 인해 최악의 경우 복잡도는 O(n)

문법 선 요약

  • 접근(조회): my_dict[키], my_dict.get(키[, 기본값])
  • 값 할당(추가/수정): my_dict[키] = 값
  • 삭제: del my_dict[키], my_dict.pop(키[, 기본값])
  • 검색 메서드: my_dict.keys(), my_dict.values(), my_dict.items()
  • 병합: my_dict.update(다른_dict)
  • 복사: my_dict.copy() (얕은 복사)
  • 전체 삭제: my_dict.clear()
  • 키 확인: if 키 in my_dict:

딕셔너리 생성

  1. 중괄호 {} 사용
my_dict = {key : value}

my_dict = {
    "이름": "홍길동",
    "나이": 25,
    "취미": ["독서", "게임"]
}
  1. dict() 함수 사용
      • 키워드 인자(예제에서는 name, age)로 정의
    my_dict = dict(name = "홍길동" , age = "25")
      • 튜플 리스트(key, value)로 정의
    my_dict = dict([(key, value),(key, value), ...])
    
    my_dict = dict([
          ("이름", "홍길동"),
          ("나이", "25")
    ])

접근 및 수정

접근(조회)

  • my_dict[key]
    • 키가 존재하지 않을 경우 KeyError 발생
  • my_dicy.get(key, 기본값)
    • 키가 없으면 기본값을 반환하고, 있으면 해당 값을 반환
    • 안전하게 접근할 때 자주 사용됨 (에러 대신 기본값 반환)
my_dict = {"name": "Alice", "age": 25}

# 1) 대괄호 []를 통한 접근
print(my_dict["name"])  # "Alice"

# 2) get() 메서드를 통한 접근
print(my_dict.get("age"))          # 25
print(my_dict.get("address"))      # None (키가 없으므로 기본값이 None)
print(my_dict.get("address", "No Address"))  # "No Address"

값 할당(추가/수정)

  • my_dict[키] = 새로운_값
      • 키가 없으면 새로운 키-값 쌍을 추가
      • 키가 이미 있으면 기존 키의 값을 수정
    my_dict = {"name": "Alice", "age": 25}
    
    # 1) 새로운 키-값 쌍 추가
    my_dict["address"] = "Wonderland"
    print(my_dict)  
    # {"name": "Alice", "age": 25, "address": "Wonderland"}
    
    # 2) 기존 키의 값 수정
    my_dict["age"] = 26
    print(my_dict)  
    # {"name": "Alice", "age": 26, "address": "Wonderland"}

삭제

  • del my_dict[키]
      • 해당 키-값 쌍을 삭제
    my_dict = {"name": "Alice", "age": 25, "address": "Wonderland"}
    
    del my_dict["address"]
    print(my_dict)  
    # {"name": "Alice", "age": 25}
  • my_dict.pop(키[, 기본값])
      • 키가 존재하면 삭제 후 값을 반환
      • 기본값을 지정하면 키가 없을 때 그 기본값을 반환 (지정 안 하면 KeyError)
    my_dict = {"name": "Alice", "age": 25}
    
    removed_value = my_dict.pop("age")
    print(removed_value)  # 25
    print(my_dict)        # {"name": "Alice"}
    
    # 기본값을 지정한 경우
    result = my_dict.pop("address", "No Address")
    print(result)         # "No Address"
    print(my_dict)        # {"name": "Alice"}

키/값/아이템 확인

  • my_dict.keys() : 딕셔너리의 모든 키를 반환
my_dict = {"name": "Alice", "age": 25, "address": "Wonderland"}

print(my_dict.keys())  
# dict_keys(['name', 'age', 'address'])

for key in my_dict.keys():
    print(key)
# name
# age
# address
  • my_dict.values() : 모든 값을 반환
my_dict = {"name": "Alice", "age": 25, "address": "Wonderland"}

print(my_dict.values())
# dict_values(['Alice', 25, 'Wonderland'])

for val in my_dict.values():
    print(val)
# Alice
# 25
# Wonderland
  • my_dict.items() : (키, 값) 형태의 튜플들을 반환
my_dict = {"name": "Alice", "age": 25, "address": "Wonderland"}

print(my_dict.items())
# dict_items([('name', 'Alice'), ('age', 25), ('address', 'Wonderland')])

for key, value in my_dict.items():
    print(key, value)
# name Alice
# age 25
# address Wonderland

딕셔너리 병합

  • my_dict.update(other_dict) : other_dict의 키-값 쌍을 현재 딕셔너리에 병합하거나 덮어씀
my_dict = {"name": "Alice", "age": 25}
another_dict = {"age": 30, "address": "Wonderland"}

my_dict.update(another_dict)
print(my_dict)
# {"name": "Alice", "age": 30, "address": "Wonderland"}

in 연산자

  • if 키 in my_dict: : 딕셔너리에 해당 키가 존재하는지 확인 (존재유무 판별)
my_dict = {"name": "Alice", "age": 25}

if "name" in my_dict:
    print("name 키가 존재합니다.")

if "address" not in my_dict:
    print("address 키가 없습니다.")

복사

  • copy_dict = my_dict.copy() : 얕은 복사(shallow copy)
import copy

my_dict = {"name": "Alice", "hobbies": ["reading", "gaming"]}
copy_dict = my_dict.copy()

# 얕은 복사이므로 리스트(가변 객체)까지는 그대로 참조를 공유함
copy_dict["hobbies"].append("coding")

print(my_dict)  
# {"name": "Alice", "hobbies": ["reading", "gaming", "coding"]}
print(copy_dict)  
# {"name": "Alice", "hobbies": ["reading", "gaming", "coding"]}

# 만약 완전히 분리된 복사를 원한다면
deep_copy_dict = copy.deepcopy(my_dict)
  • (참고) 깊은 복사 시에는 copy 모듈의 deepcopy() 활용

비우기

  • my_dict.clear() : 모든 키-값 쌍 제거
my_dict = {"name": "Alice", "age": 25, "address": "Wonderland"}
my_dict.clear()
print(my_dict)  
# {}
728x90

'WIL' 카테고리의 다른 글

H2가 MySQL, PostgreSQL와의 차이  (0) 2025.06.19
개발 환경에서 프론트-백 서버 분리 이유  (0) 2025.06.19
크래프톤 정글 학습 13주차: Spring Boot로 CRUD 게시판 API 서버 구축기  (0) 2025.06.18
'WIL' 카테고리의 다른 글
  • H2가 MySQL, PostgreSQL와의 차이
  • 개발 환경에서 프론트-백 서버 분리 이유
  • 크래프톤 정글 학습 13주차: Spring Boot로 CRUD 게시판 API 서버 구축기
ahpicl64
ahpicl64
in the clouds
  • ahpicl64
    구름
    ahpicl64
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • WIL (4)
      • Jungle (36)
      • AWS (2)
      • SQL (2)
      • CS:APP (17)
      • Algorithm (10)
      • K8s (7)
      • 자료 구조 (10)
      • Spring (4)
      • React (0)
      • 운영체제 (1)
      • 기타등등 (2)
      • 이야기 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    컴퓨터시스템
    github actions
    트러블슈팅
    알고리즘
    queue
    어셈블리
    DevOps
    CSAPP
    DB
    python
    부하테스트
    Spring
    CloudFront
    EC2
    Spring boot
    IAM
    AWS
    자료구조
    S3
    k8s
  • 02-21 06:16
  • hELLO· Designed By정상우.v4.10.3
ahpicl64
[Python] 딕셔너리(Dictionary) 문법
상단으로

티스토리툴바