파이썬 딕셔너리 사용 시 유용한 컨테이너 자료형들의 용도와 사용법을 정리해보았다.

 

1. defaultdict

딕셔너리는 존재하지 않는 인덱스/키를 조회, 삭제 연산 시 각각 IndexError, KeyError가 발생한다.

그래서 다음처럼 에러가 발생하는 경우를 예외처리 하는 방법도 있다.

    a = {}  # 빈 딕셔너리
    
#1 try-except
    try:
        print(a['key'])  # 없는 키 조회 시
        del a['key']  # 없는 키 삭제 시
    except KeyError:
        print('KeyError 발생')

#2 if문
    if 'key' in a:
        print('Key 존재')
    else:
        print('존재하지 않는 Key')

 

defaultdict 객체는 존재하지 않는 키에 대한 연산을 할때 디폴트 값을 기준으로 딕셔너리 키:값을 생성해준다.

int, list 등 다양한 형태로 딕셔너리를 만들 수 있다.

list 딕셔너리는 키에 문자열도, 리스트도 삽입할 수 있다. 값을 넣어 줄 때는 리스트처럼 append를 사용하면 된다.

 

    a = collections.defaultdict(int) 
    a['key'] += 10
    print(a) #defaultdict(<class 'int'>, {'key': 10})
    
    b = collections.defaultdict(list) 
    b[0].append([1,2,3])
    b[0].append('to')
    print(b) #defaultdict(<class 'list'>, {0: [[1, 2, 3], 'to']})

 

 

 

2. Counter

Counter는 아이템에 대한 개수를 계산해 딕셔너리로 리턴한다. (개사기)

most_common(n) 로 Counter 객체의 n번째까지 빈도가 높은 요소를 출력할 수도 있다.  

    a = [2,4,1,1,1,1,5,5,5,3,6]
    b = collections.Counter(a)
    print(b) #Counter({1: 4, 5: 3, 2: 1, 4: 1, 3: 1, 6: 1})
    print(b.most_common(2)) #[(1, 4), (5, 3)]

 

+ 딕셔너리는 해시테이블을 이용한 자료형으로 입력 순서가 유지되지 않아 입력순서를 유지하려면 OrderedDict 이라는 객체를 사용해야했으나 파이썬 3.7부터는 딕셔너리도 내부적으로 인덱스를 이용해 입력 순서가 유지되도록 개선됐다.

 


Reference

책) 파이썬 알고리즘 인터뷰 (박상길) 

반응형

+ Recent posts