1. Dictionary 란?
Key -Value로 이루어진 자료형으로, 다양한 형태의 값을 키로 지정할 수 있어 리스트보다 유연하다는 장점이 존재한다. Dictionary는 내부적으로 해시 테이블로 구성되어 있어 값에 접근할 때 시간복잡도가 O(1)로 매우 효율적이다. 리스트와 같이 순차적으로 검색해야 하는 자료형과 달리, Dictionary는 해시를 기반으로 특정 키를 더 빠르게 찾아낼 수 있다.
Dictionary는 아래와 같은 두 가지 방법으로 선언할 수 있다.
(딕셔너리명) = {}
(딕셔너리명) = dict()
List 자료형의 경우 최대 시간 복잡도가 O(n)이지만, Dictionary 자료형의 경우 키를 사용하여 바로 접근하기 때문에 최대 시간 복잡도는 O(1)이다. 따라서 데이터에 특정 요소에 빠르게 접근해야 하면 Dictonary를 사용하다는 것이 효율적이다.
즉, Dictionary 사용이 가능하다면, Dictionary 사용하는 것이 시간적인 측면에서 유리하다는 것을 의미한다.
2. Dictionary의 내부 기능
Dictionary에서는 대괄호([, ])를 사용하여 특정 키에 해당하는 값에 접근할 수 있다.
# dictionary 선언
dict_val = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
# a의 키를 가진 값을 출력
print(dict_val['a']) # 결과 : 1
# 요소 추가 및 갱신
dict_val['d'] = 4
dict_val['a'] = 10
print(dict_val) # 결과 : {'a' : 10, 'b' : 2, 'c' : 3, 'd' : 4}
Dictionary에서 키, 값, 키 - 값 쌍에 접근하는 방법은 다양하지만, keys(), values(), items() 함수를 사용하면 쉽게 접근할 수 있다.
#dictionary 선언
dict_val {'a' : 1, 'b' : 2, 'c' : 3}
# 키 접근 및 출력
for key in dict_val.keys():
print(key) # 결과 : a,b,c
# 값 출력
for value in dict_val.values():
print(value) # 결과 1,2,3
# 키-값 쌍 출력
for key, value in dict_val.items():
print(key, value) # 결과 ('a', 1), ('b', 2), ('c', 3)
즉, keys(), values() 함수를 통해 키와 값에 대한 접근이 가능해지며, 주로 values()를 활용해서 값을 찾는데 주로 활용한다.
하지만, 특정 키에 대해 접근을 하려고 하는데 존재하지 않는 키라면, 에러가 발생하여 원하는 결과를 얻지 못하는 상황이 존재한다. 이러한 상황을 방지하기 위해 주로 get()을 사용한다. get()은 존재하지 않는 키에 대해 접근할 때 오류를 발생하지 않고 None 값을 리턴하는 함수로 아래와 같은 형태로 사용된다.
from collections import Counter
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(data)
# Counter 객체를 일반 딕셔너리로 변환
dict_counter = dict(counter.items())
print(dict_counter) # 결과: {'apple': 4, 'banana': 2, 'orange': 1}
3. Dictionary의 활용
Python의 collections 모듈에는 코테에서 유용하게 사용할 수 있는 자료 구조들이 존재한다. 그 중 Dictionary와 가장 유용하게 사용되는 것은 defaultdict와 Counter이다.
[defaultdict]
defaultdict는 일반적인 딕셔너리와 유사하지만, 차이점은 존재하지 않는 키에 접근하였을 때 기본값을 설정하여 오류 없이 새로운 키를 자동으로 생성한다는 것이다. 이는 get()을 사용하여도 해결할 수 있는 문제이지만, defaultdict를 사용하면 특정 값으로 초기화된 Dictionary 아이템이 자동으로 생성되기 때문에 보다 간편하게 값의 추가가 가능하다.
from collections import defaultdict
dict_val = defaultdict(list)
dict_val['apple'].append(1) # 'apple' 키가 없으므로 자동으로 생성됨
dict_val['apple'].append(2)
print(dict_val) # 결과: defaultdict(<class 'list'>, {'apple': [1, 2]})
[Counter]
Counter는 해시 가능한 객체를 개수를 세기 위해 주로 사용하는 클래스이다. 리스트, 튜플, 문자열 등에서 각 요소의 빈도를 계산하는데 주로 사용하며 데이터의 빈도를 파악하거나 중복된 데이터를 다룰 때 자주 사용한다.
특정 List에서 요소의 개수를 파악하고 이를 Dictionary 형태로 변환하는 예시는 아래와 같다.
from collections import Counter
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(data)
# 'apple'의 개수 확인
print(counter['apple']) # 결과: 3
# 요소 추가 (기존 개수에 1을 추가)
counter['apple'] += 1
print(counter['apple']) # 결과: 4
# 모든 요소와 개수 확인
print(list(counter.items())) # 결과: [('apple', 4), ('banana', 2), ('orange', 1)]
'Coding' 카테고리의 다른 글
[Python] Lambda(람다) 함수 (0) | 2024.11.10 |
---|---|
[Python] Shadow DOM - Selenium (0) | 2024.03.17 |
[Python] Self는 무엇일까? (1) | 2023.10.29 |
1. Dictionary 란?
Key -Value로 이루어진 자료형으로, 다양한 형태의 값을 키로 지정할 수 있어 리스트보다 유연하다는 장점이 존재한다. Dictionary는 내부적으로 해시 테이블로 구성되어 있어 값에 접근할 때 시간복잡도가 O(1)로 매우 효율적이다. 리스트와 같이 순차적으로 검색해야 하는 자료형과 달리, Dictionary는 해시를 기반으로 특정 키를 더 빠르게 찾아낼 수 있다.
Dictionary는 아래와 같은 두 가지 방법으로 선언할 수 있다.
(딕셔너리명) = {}
(딕셔너리명) = dict()
List 자료형의 경우 최대 시간 복잡도가 O(n)이지만, Dictionary 자료형의 경우 키를 사용하여 바로 접근하기 때문에 최대 시간 복잡도는 O(1)이다. 따라서 데이터에 특정 요소에 빠르게 접근해야 하면 Dictonary를 사용하다는 것이 효율적이다.
즉, Dictionary 사용이 가능하다면, Dictionary 사용하는 것이 시간적인 측면에서 유리하다는 것을 의미한다.
2. Dictionary의 내부 기능
Dictionary에서는 대괄호([, ])를 사용하여 특정 키에 해당하는 값에 접근할 수 있다.
# dictionary 선언
dict_val = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
# a의 키를 가진 값을 출력
print(dict_val['a']) # 결과 : 1
# 요소 추가 및 갱신
dict_val['d'] = 4
dict_val['a'] = 10
print(dict_val) # 결과 : {'a' : 10, 'b' : 2, 'c' : 3, 'd' : 4}
Dictionary에서 키, 값, 키 - 값 쌍에 접근하는 방법은 다양하지만, keys(), values(), items() 함수를 사용하면 쉽게 접근할 수 있다.
#dictionary 선언
dict_val {'a' : 1, 'b' : 2, 'c' : 3}
# 키 접근 및 출력
for key in dict_val.keys():
print(key) # 결과 : a,b,c
# 값 출력
for value in dict_val.values():
print(value) # 결과 1,2,3
# 키-값 쌍 출력
for key, value in dict_val.items():
print(key, value) # 결과 ('a', 1), ('b', 2), ('c', 3)
즉, keys(), values() 함수를 통해 키와 값에 대한 접근이 가능해지며, 주로 values()를 활용해서 값을 찾는데 주로 활용한다.
하지만, 특정 키에 대해 접근을 하려고 하는데 존재하지 않는 키라면, 에러가 발생하여 원하는 결과를 얻지 못하는 상황이 존재한다. 이러한 상황을 방지하기 위해 주로 get()을 사용한다. get()은 존재하지 않는 키에 대해 접근할 때 오류를 발생하지 않고 None 값을 리턴하는 함수로 아래와 같은 형태로 사용된다.
from collections import Counter
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(data)
# Counter 객체를 일반 딕셔너리로 변환
dict_counter = dict(counter.items())
print(dict_counter) # 결과: {'apple': 4, 'banana': 2, 'orange': 1}
3. Dictionary의 활용
Python의 collections 모듈에는 코테에서 유용하게 사용할 수 있는 자료 구조들이 존재한다. 그 중 Dictionary와 가장 유용하게 사용되는 것은 defaultdict와 Counter이다.
[defaultdict]
defaultdict는 일반적인 딕셔너리와 유사하지만, 차이점은 존재하지 않는 키에 접근하였을 때 기본값을 설정하여 오류 없이 새로운 키를 자동으로 생성한다는 것이다. 이는 get()을 사용하여도 해결할 수 있는 문제이지만, defaultdict를 사용하면 특정 값으로 초기화된 Dictionary 아이템이 자동으로 생성되기 때문에 보다 간편하게 값의 추가가 가능하다.
from collections import defaultdict
dict_val = defaultdict(list)
dict_val['apple'].append(1) # 'apple' 키가 없으므로 자동으로 생성됨
dict_val['apple'].append(2)
print(dict_val) # 결과: defaultdict(<class 'list'>, {'apple': [1, 2]})
[Counter]
Counter는 해시 가능한 객체를 개수를 세기 위해 주로 사용하는 클래스이다. 리스트, 튜플, 문자열 등에서 각 요소의 빈도를 계산하는데 주로 사용하며 데이터의 빈도를 파악하거나 중복된 데이터를 다룰 때 자주 사용한다.
특정 List에서 요소의 개수를 파악하고 이를 Dictionary 형태로 변환하는 예시는 아래와 같다.
from collections import Counter
data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(data)
# 'apple'의 개수 확인
print(counter['apple']) # 결과: 3
# 요소 추가 (기존 개수에 1을 추가)
counter['apple'] += 1
print(counter['apple']) # 결과: 4
# 모든 요소와 개수 확인
print(list(counter.items())) # 결과: [('apple', 4), ('banana', 2), ('orange', 1)]
'Coding' 카테고리의 다른 글
[Python] Lambda(람다) 함수 (0) | 2024.11.10 |
---|---|
[Python] Shadow DOM - Selenium (0) | 2024.03.17 |
[Python] Self는 무엇일까? (1) | 2023.10.29 |