참고자료

  1. https://www.slideshare.net/dahlmoon/collections-20160313
  2. https://godoftyping.wordpress.com/2015/05/13/python-%EC%88%9C%EC%84%9C%EB%A5%BC-%EA%B8%B0%EC%96%B5%ED%95%98%EB%8A%94-%EC%82%AC%EC%A0%84%ED%98%95-ordereddict/

OrderedDict

파이썬에서 dictionary는 기본적으로 hashmap으로 만들어졌기 때문에 저장되는 순서를 고려하지 않는다. 그래서 dic.items() 함수가 항상 같은 순서의 배열을 리턴한다고 보장 할 수 없다(고한다..).

내부적으로 linked list를 사용해서 순서를 유지함

from collections import OrderedDict

a = OrderedDict([['a', 1], ['b', 2], ['c', 3]])
print(a) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])

나중에 유용하게 쓰일 것 같다.

Counter

원소들의 개수를 세준다. 매~우 유용하다.

from collections import Counter

items = [1, 1, 2, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7]
c = Counter(items)
print(c) # Counter({7: 5, 1: 2, 2: 2, 6: 2, 3: 1, 4: 1, 5: 1})

most_common()

Counter를 튜플로 보여준다. 루프돌릴때 유용할것같다.

from collections import Counter

items = [1, 1, 2, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7]
c = Counter(items)
els = c.most_common()
print(els) # [(7, 5), (1, 2), (2, 2), (6, 2), (3, 1), (4, 1), (5, 1)]

defaultdict

key에대한 default value를 지정해준다.

from collections import defaultdict

dic = defaultdict(lambda : "default value")
dic.update({'a': 10, 'b': 20, 'c': 30})

print(dic['b']) # 20
print(dic['zzm']) # default value

원래 dictionary에 setdefault라는 함수가 있기는 한데 이거는 매번 새로운 키에 대한 기본값을 지정해 줘야하기 때문s에 실제 알고리즘에서는 별 도움이 안될것 같다. 반면 defaultdict는 유용할것같다.

deque