출처: 파이썬 알고리즘 인터뷰, 박상길
- 파이썬의 딕셔너리는 키/값 구조로 이루어진 딕셔너리를 말한다
- 내부적으로는 해시 테이블로 구현되어 있다.
딕셔너리의 주요 연산 시간 복잡도
len(a) : O(1)
a[key] : O(1)
a[key] = value : O(1)
key in a : O(1)
파이썬 3.6 이하에서는 입력 순서가 유지되지 않다 collections.OrderedDict()를 제공했다.
파이썬 3.7부터는 내부적으로 인덱스를 이용해 입력 순서를 유지하도록 개선돼었다.
collections.defaultdict()
- 조회 시 항상 디폴트 값을 생성해 키 오류를 방지한다.
from collections import defaultdict
def def_value():
return "Not Present"
# Defining the dict
d = defaultdict(def_value)
d["a"] = 1
d["b"] = 2
print(d["a"]) # 1
print(d["b"]) # 2
print(d["c"]) # Not Present
d = defaultdict(lambda: "Not Present")
d["a"] = 1
d["b"] = 2
print(d["a"]) # 1
print(d["b"]) # 2
print(d["c"]) # Not Present
d = deflaultdict(int)
d["a"] = 5
d["b"] = 4
d["c"] += 1
- "c"와 같이 존재하지 않는 키에도 KeyError가 발생하지 않고 바로 연산이 간으하다
- 디폴트인 0을 기준으로 자동을오 생성한 후 여기에 1을 더해 최종적으로 1이 만들어진다.
collections.Counter()
- 요소의 값을 키로 하고 개수를 값 형태로 만들어 카운팅한다.
from collections import Counter
# With sequence of items
print(Counter(['B','B','A','B','C','A','B','B','A','C']))
# Counter({'B': 5, 'A': 3, 'C': 2})
# with dictionary
print(Counter({'A':3, 'B':5, 'C':2}))
# Counter({'B': 5, 'A': 3, 'C': 2})
# with keyword arguments
print(Counter(A=3, B=5, C=2))
# Counter({'B': 5, 'A': 3, 'C': 2})
from collections import Counter
coun = Counter()
coun.update([1, 2, 3, 1, 2, 1, 1, 2])
print(coun)
# Counter({1: 4, 2: 3, 3: 1})
coun.update([1, 2, 4])
print(coun)
# Counter({1: 5, 2: 4, 3: 1, 4: 1})
coun.most_common(2) # [(1, 5), (2, 4)]
- 가장 빈도 수가 높은 요소 추출
'프로그래머 > Python' 카테고리의 다른 글
[Python] Leet Code 344 : Reverse String 풀이 및 분석 (0) | 2021.02.03 |
---|---|
[Python] Leet Code 125 : Valid Palindrome 풀이 및 분석 (0) | 2021.02.03 |
[Python] 파이썬 문법 - is 와 ==의 차이 | python is & == (0) | 2021.02.01 |
[Python] print | .join() | f-string (0) | 2021.01.31 |
[Python] range | generator의 방식을 활용하는 대표적 함수 (0) | 2021.01.31 |