[Python 기초]

[Python] Dictionary 정리

dyk98 2024. 11. 26. 20:08

DICTIONARY

  • Dictionary는 키-값(key-value) 쌍으로 데이터를 저장하는 자료구조.
  • 데이터를 효율적으로 검색, 추가, 수정, 삭제할 수 있으며, 특히 키를 기반으로 값을 관리하는 경우 매우 유용

장점

  1. 빠른 검색 속도
    • 키를 사용해 값을 빠르게 검색할 수 있음(해시 테이블 기반).
    • 시간 복잡도: 평균적으로 O(1).
  2. 유연성
    • 값(value)에는 어떤 데이터 타입도 저장 가능(List, Tuple, Set 등 포함).
    • 키(key)는 변경 불가능한(Immutable) 데이터 타입이어야 함(e.g., str, int, tuple).
  3. 가독성
    • 데이터가 키-값 쌍으로 저장되므로 의미 있는 데이터 구조를 표현하기 쉬움.
  4. 유연한 데이터 조작
    • 새로운 키-값 추가, 삭제, 갱신이 간편.
  5. 중복 방지
    • 동일한 키를 중복해서 사용할 수 없으므로 데이터를 고유하게 관리 가능.

단점

  1. 순서 보장
    • Python 3.7 이후부터는 입력된 순서를 보장하지만, 일부 언어에서는 순서가 보장되지 않을 수 있음.
  2. 메모리 사용량
    • 해시 테이블 구조를 사용하므로 메모리 사용량이 리스트보다 큼.
  3. 해시 충돌
    • 키의 해시값 충돌이 발생할 수 있으며, 충돌을 처리하는 데 추가 비용이 소모될 수 있음.
  4. 복잡한 데이터 구조 관리 어려움
    • 중첩된 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