Dictionary, 너 누구냐!

장수혁·2021년 9월 27일
0

1. 기본 성질

  • 키 / 값 구조로 이뤄져있고, 입력 순서가 유지되며, 내부는 해시 테이블로 구현되어 있다.
  • 파이썬의 딕셔너리는 불변 객체를 모두 키로 사용할 수 있으며, 입력과 조회 모두 O(1)에 ㄱㄴ

주요 연산 시간 복잡도
len(a) : O(1) 요소의 개수를 리턴한다. = 키 개수
a[key] : O(1) 키 조회하여 값 리턴
a[key] = value : O(1) 키/값을 삽입
key in a : O(1) 딕셔너리에 키가 있는지 확인
대부분의 연산이 O(1)에 처리 가능한 매우 우수한 자료형!!

2. 딕셔너리 활용 방법

  • 존재하지 않는 키 조회하면 Key Error 발생 >> list와 마찬가지로 try 예외처리 ㄱㄴ
  • dict.keys() / dict.values() / dict.items() for문 사용 ㄱㄴ
    cf) dict.keys()는 list로 리턴되는 것이 아니라 dict-keys라는 객체로 리턴(memory 절감)

3. Collections 모듈

1. defaultdict 객체

존재하지 않는 키를 조회할 경우, 에러메시지 출력 X

대신, 디폴트 값 기준 해당 키에 대한 딕셔너리 아이템 생성!

a=collectoins.defaultdict(int) #value의 형태 
a['A']=5
a['B']=4
a
>>defaultdict(<class 'int'>, {'A': 5, 'B': 4})

여기서 존재하지 않는 키 C를 넣어본다.

a['C']+=1
a
>>defaultdict(<class 'int'>, {'A': 5, 'B': 4, 'C':1})

KEY ERROR가 발생하지 않고 디폴트 0 을 기준으로 자동 생성 + 1

2. Counter 객체

아이템의 개수를 계산해 딕셔너리로 리턴 (개꿀)

a= [1,2,3,4,5,5,5,6,6]
b= collections.Counter(a)
b
>> Counter({5:3, 6:2, 1:1, 2:1 ,3:1, 4:1}) #개수 순 내림차순, 개수 동일시 순서순

키 = 아이템 value, 값 = 해당 아이템의 개수. b는 collections.Counter 클래스 가짐

b.most_common(2)
>>[(5,3),(6,2)]

최빈값 찾으려면 most_common() 사용하면 된다. 2개 이상 추출하면 리스트 안 튜플 형태로 리턴

a = Counter({'k':3,'j':1})
a = Counter({'k':2,'r':1})

a+b = Counter({'k':5,'j':1,'r':1}) 
a-b = Counter({'k':1,'j':1}) # 차집합 느낌 

a&b = Counter({"k":2})  #교집합
a|b = Counter({'k':3,'j':1,'r':1}) #합집합
profile
달리기는 못해도 걷기는 할 수 있다

0개의 댓글