[24.05.31] 99클럽 코테 스터디 12일차 TIL - DefaultDict

2024. 5. 31. 21:48·회고
728x90

1. DefaultDict

defaultdict는 python의 collections 모듈에서 제공하는 딕셔너리 서브클래스로, 기본 값을 제공하는 기능을 가지고 있다.

기본 딕셔너리와 달리 defaultdict는 존재하지 않는 키를 참조할 때 keyError를 발생시키지 않고, 저장된 기본 값을 자동으로 생성하여 반환한다.

 

1.1 장점

  • 기본 값 자동 생성 : 기본 값을 자동으로 생성하여 키가 존재하지 않을 때 발생하는 KeyError를 방지하고, 코드가 더 간결해지고 명확해진다.
  • 초기화가 필요 없는 코드 : 값을 추가하기 전에 미리 초기화 할 필요가 ㅇ벗어 코드의 가독성을 높여주고 버그를 줄여준다.
  • 코드 간결화 :  코드가 더 간결해지고 명확해진다.
  • 타입 안전성 : 일관된 타입의 기본값을 보장할 수 있다.

 

1.2 단점

  • 모든 키에 대해 기본값 생성 : defaultdict는 존재하지 않는 키에 접근할 때마다 기본값을 생성한다. 이는 의도하지 않은 키가 추가되도록 만들 수 있으며, 키가 추가되면 메모리를 사용하게 된다.
  • 디버깅의 어려움 : 의도치 않은 키의 추가로 디버깅을 어렵게 만들 수가 있다.
  • 명시적이지 않은 코드 : 기본값 생성 함수가 암묵적으로 호출되기 때문에 코드의 의도가 명시적이지 않을 수 있으며, 코드의 가독성을 떨어트릴 수 있다.

 

1.3 기본적인 사용방법

  • 기본값을 생성하는 함수를 인자로 받는다
  • 새로운 키를 생성할때마다 이 함수가 호출되어 기본값이 생성된다.
from collections import defaultdict

# int를 기본값 생성 함수로 사용하는 defaultdict
int_dict = defaultdict(int)
int_dict['a'] += 1
print(int_dict)  # 출력: defaultdict(<class 'int'>, {'a': 1})

# list를 기본값 생성 함수로 사용하는 defaultdict
list_dict = defaultdict(list)
list_dict['a'].append(1)
print(list_dict)  # 출력: defaultdict(<class 'list'>, {'a': [1]})

위 코드에서 list_dict['a']를 처음 참조할 때 자동으로 빈 리스트가 생성된다. 그 후 append 메소드를 사용하여 값을 추가할 수 있다. 

 

1.4 기본적인 메소드 

defaultdict는 기본적으로 dict 클래스의 서브클래스이기 떄문에 dict 객체에서 사용할 수 있는 대부분의 메소드를 그대로 사용할 수 있다.

 

1.4.1 defaultdict.keys()

딕셔너리의 모든 키를 반환한다

 

1.4.2 defaultdict.values()

딕셔너리의 모든 값을 반환한다

 

1.4.3 defaultdict.items()

딕셔너리의 모든 키-값 쌍을 튜플 형태로 반환한다.

 

4.4 defaultdict.get(key, default=None)

주어진 키에 대응하는 값을 반환한다. 만약 키가 존재하지 않으면 기본값을 반환한다.

 

from collections import defaultdict

dd = defaultdict(list)
dd['a'].append(1)
dd['b'].append(2)

keys = dd.keys()
print(keys)  # dict_keys(['a', 'b'])

values = dd.values()
print(values)  # dict_values([[1], [2]])

items = dd.items()
print(items)  # dict_items([('a', [1]), ('b', [2])])

value = dd.get('c', [])
print(value)  # []

 

그 밖에도 값을 업데이트하는 update, 주어진 키에 해당하는 값을 제거하고 반환하는 pop, 모든 항목을 제거하는 clear 등의 메소드가 존재한다. 

728x90

'회고' 카테고리의 다른 글

[24.06.02] 99클럽 코테 스터디 14일차 TIL : Class, Attribute, self  (0) 2024.06.02
[24.06.01] 99클럽 코테 스터디 13일차 TIL - OrderedDict  (0) 2024.06.01
[24.05.30] 99클럽 코테 스터디 11일차 TIL - 회전 알고리즘, 튜플 자료형  (0) 2024.05.30
[24.05.29] 99클럽 코테 스터디 10일차 TIL - 완전 탐색 알고리즘  (0) 2024.05.29
[24.05.28] 99클럽 코테 스터디 9일차 TIL - 해시 알고리즘, Set 자료형  (0) 2024.05.28
'회고' 카테고리의 다른 글
  • [24.06.02] 99클럽 코테 스터디 14일차 TIL : Class, Attribute, self
  • [24.06.01] 99클럽 코테 스터디 13일차 TIL - OrderedDict
  • [24.05.30] 99클럽 코테 스터디 11일차 TIL - 회전 알고리즘, 튜플 자료형
  • [24.05.29] 99클럽 코테 스터디 10일차 TIL - 완전 탐색 알고리즘
bbooo
bbooo
  • bbooo
    bbooo
    bbooo
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • study (61)
        • 백준(BOJ) (34)
        • Programmers (15)
        • LeetCode (9)
      • AI (4)
        • Paper (0)
      • SSAC X IFFEL (4)
        • DeepML (1)
        • 밑바닥 부터 시작하는 딥러닝 (2)
      • 회고 (46)
      • Error (10)
      • Setting (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    투포인터
    python 과제 진행하기
    LeetCode
    programmers 석유시추
    백트래킹
    문자열을 원하는 길이로
    파이썬 과제 진행하기
    백준
    set
    프로그래머스 석유시추
    브루트포스
    programmers 과제 진행하기
    vscode
    99클럽
    docker
    Til
    그리디 알고리즘
    개발자 취업
    sort
    python 석유시추
    sequence item 0: expected str instance int found
    Counter
    항해99
    두 포인터
    코딩테스트 준비
    파이썬 석유시추
    풀이 실패
    typeerror: sequence item 0: expected str instance int found
    백준 2470
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
bbooo
[24.05.31] 99클럽 코테 스터디 12일차 TIL - DefaultDict
상단으로

티스토리툴바