DICTIONARY
- Dictionary는 키-값(key-value) 쌍으로 데이터를 저장하는 자료구조.
- 데이터를 효율적으로 검색, 추가, 수정, 삭제할 수 있으며, 특히 키를 기반으로 값을 관리하는 경우 매우 유용
장점
- 빠른 검색 속도
- 키를 사용해 값을 빠르게 검색할 수 있음(해시 테이블 기반).
- 시간 복잡도: 평균적으로 O(1).
- 유연성
- 값(value)에는 어떤 데이터 타입도 저장 가능(List, Tuple, Set 등 포함).
- 키(key)는 변경 불가능한(Immutable) 데이터 타입이어야 함(e.g., str, int, tuple).
- 가독성
- 데이터가 키-값 쌍으로 저장되므로 의미 있는 데이터 구조를 표현하기 쉬움.
- 유연한 데이터 조작
- 새로운 키-값 추가, 삭제, 갱신이 간편.
- 중복 방지
- 동일한 키를 중복해서 사용할 수 없으므로 데이터를 고유하게 관리 가능.
단점
- 순서 보장
- Python 3.7 이후부터는 입력된 순서를 보장하지만, 일부 언어에서는 순서가 보장되지 않을 수 있음.
- 메모리 사용량
- 해시 테이블 구조를 사용하므로 메모리 사용량이 리스트보다 큼.
- 해시 충돌
- 키의 해시값 충돌이 발생할 수 있으며, 충돌을 처리하는 데 추가 비용이 소모될 수 있음.
- 복잡한 데이터 구조 관리 어려움
- 중첩된 Dictionary는 가독성이 떨어질 수 있음.
실제 프로젝트에서 Dictionary 사용 사례
1. 데이터 매핑
- Dictionary는 데이터를 키-값 쌍으로 매핑하는 데 가장 적합합니다.
- 사용 예시: 학생 ID를 이름에 매핑.
students = {101: "Alice", 102: "Bob", 103: "Charlie"}
print(students[102]) # Output: Bob
2. 구성 값 관리 Dictionary는 설정값이나 구성 데이터를 저장하고 관리하는 데 유용합니다.
- 사용 예시: 앱 설정 저장.
settings = {
"theme": "dark",
"language": "English",
"notifications": True
}
print(settings["theme"]) # Output: dark
3. 카운팅 및 집계
- Dictionary를 활용해 데이터를 집계하거나 특정 항목의 빈도를 계산할 수 있습니다.
- 사용 예시: 단어 빈도 계산.
text = "apple banana apple cherry banana apple"
word_counts = {}
for word in text.split():
word_counts[word] = word_counts.get(word, 0) + 1
print(word_counts) # Output: {'apple': 3, 'banana': 2, 'cherry': 1}
4. JSON 데이터 처리
- API에서 반환된 JSON 데이터는 대개 Dictionary 형식으로 표현됩니다.
- 사용 예시: REST API 응답 처리.
response = {
"user": {"id": 1, "name": "Alice"},
"posts": [{"id": 101, "title": "Hello World"}, {"id": 102, "title": "Python Rocks"}]
}
print(response["user"]["name"]) # Output: Alice
5. 데이터 그룹핑
- Dictionary는 데이터를 특정 기준으로 그룹화할 때 사용됩니다.
- 사용 예시: 학점별 학생 분류.
grades = {
"A": ["Alice", "Bob"],
"B": ["Charlie", "David"],
"C": ["Eve"]
}
print(grades["A"]) # Output: ['Alice', 'Bob']
6. 캐싱
- Dictionary를 활용해 계산 결과나 데이터베이스 요청을 캐싱하여 속도를 개선합니다.
- 사용 예시: 피보나치 수열 캐싱.
cache = {}
def fibonacci(n):
if n in cache:
return cache[n]
if n <= 1:
return n
cache[n] = fibonacci(n-1) + fibonacci(n-2)
return cache[n]
print(fibonacci(10)) # Output: 55
7. 그래프 표현
- Dictionary는 그래프의 노드와 엣지를 표현하는 데 자주 사용됩니다.
- 사용 예시: 그래프 구조 저장.
graph = {
"A": ["B", "C"],
"B": ["A", "D"],
"C": ["A", "D"],
"D": ["B", "C"]
}
print(graph["A"]) # Output: ['B', 'C']
8. 사용자 권한 관리
- Dictionary를 사용해 사용자와 권한을 연결할 수 있습니다.
- 사용 예시: 사용자별 권한 저장.
permissions = {
"admin": ["read", "write", "delete"],
"editor": ["read", "write"],
"viewer": ["read"]
}
print(permissions["admin"]) # Output: ['read', 'write', 'delete']
Dictionary와 다른 자료구조 비교
특징 Dictionary List Tuple
데이터 저장 방식 | 키-값 쌍 | 순차적 저장 | 순차적 저장 |
수정 가능 여부 | 키-값 추가/수정/삭제 가능 | 값 추가/수정/삭제 가능 | 불가능 |
데이터 접근 방식 | 키를 사용해 접근 | 인덱스를 사용해 접근 | 인덱스를 사용해 접근 |
속도 | 검색: 빠름 (O(1)) | 검색: 느림 (O(n)) | 검색: 느림 (O(n)) |
용도 | 키-값 매핑 및 빠른 검색 | 순서가 중요한 데이터 | 변경되지 않는 고정 데이터 |
Therefore …
Dictionary는 키-값 쌍 기반 데이터 관리와 빠른 검색이 필요한 상황에서 사용됩니다. 특히 구조화된 데이터 저장, 구성값 관리, API 응답 처리 등 대규모 데이터 처리와 관련된 프로젝트에서 필수적으로 사용됩니다.
다만 메모리 사용량이 많고, 데이터 구조가 복잡하면 가독성이 떨어질 수 있으므로 상황에 따라 List, Tuple 등과 함께 적절히 조합해 사용하는 것이 중요.
Example of Dictionary
# 딕셔너리 생성
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 딕셔너리 값 접근
print(person["name"]) # Alice
# 딕셔너리 값 변경
person["age"] = 26
print(person) # {'name': 'Alice', 'age': 26, 'city': 'New York'}
# 딕셔너리에 새 키-값 쌍 추가
person["email"] = "alice@example.com"
print(person) # {'name': 'Alice', 'age': 26, 'city': 'New York', 'email': 'alice@example.com'}
# 딕셔너리에서 키-값 쌍 제거
del person["city"]
print(person) # {'name': 'Alice', 'age': 26, 'email': 'alice@example.com'}
# 딕셔너리에서 키 목록과 값 목록 접근
print(person.keys()) # dict_keys(['name', 'age', 'email'])
print(person.values()) # dict_values(['Alice', 26, 'alice@example.com'])
'[Python 기초]' 카테고리의 다른 글
[Python] Data type 정리 (0) | 2024.11.26 |
---|---|
[Python] SET 정리 (2) | 2024.11.26 |
[Python] Hash 간단 정리 (0) | 2024.11.26 |
[Python] LIST 정리 (0) | 2024.11.26 |
[Python] TUPLE 정리 (1) | 2024.11.26 |