본문 바로가기
프로그래밍 언어(Programming Languages)/파이썬(Python)

[Python] Python에서의 효율적인 데이터 관리: defaultdict의 마법! 🐍✨

by 데이터 벌집 2023. 11. 17.
반응형

안녕하세요, 파이썬 매니아 여러분! 🎉 오늘은 파이썬의 강력한 도구 중 하나인 defaultdict에 대해 알아보려고 합니다. 파이썬을 사용하다 보면, 종종 기본값을 가진 딕셔너리가 필요할 때가 있죠. 그럴 때 defaultdict가 무대에 등장합니다! ✨

defaultdict


defaultdict란 무엇인가요? 🤔

defaultdict는 파이썬의 collections 모듈에 있는 딕셔너리의 서브클래스입니다. 이 친구의 특별한 점은, 존재하지 않는 키를 조회할 때 요청에 응답으로 기본값을 자동으로 생성해주는 기능을 가지고 있다는 거예요! 🚀

 

 

예를 들어, 다음과 같이 딕셔너리를 생성하면, 키가 존재하지 않는 경우 KeyError 예외가 발생합니다. 

from collections import defaultdict

d = defaultdict(int)

d['a'] = 1
d['b'] = 2

print(d['c'])  # 0

 

이 예외를 방지하기 위해 defaultdict를 사용할 수 있습니다. 이 경우, 키가 존재하지 않는 경우 기본값으로 0을 지정합니다.


defaultdict의 사용법 🛠️

사용법은 간단합니다. 먼저, collections 모듈에서 defaultdict를 가져와야 해요.

 

from collections import defaultdict

 

 

예제 1️⃣: 단어별 문자 빈도수 딕셔너리 📊

 

from collections import defaultdict

# defaultdict 생성 (단어 -> 문자 -> 빈도수)
d = defaultdict(lambda: defaultdict(int))

# 단어 리스트를 순회하며 문자 빈도수 측정
for word in ["hello", "world", "python"]:
    for char in word:
        d[word][char] += 1

print(d)

 

이 스마트 코드는 🧙‍♂️ 다음과 같은 데이터 구조를 마법처럼 생성해요:

 

{
 'hello': {'h': 1, 'e': 1, 'l': 2, 'o': 1},
 'world': {'w': 1, 'o': 1, 'r': 1, 'l': 1, 'd': 1},
 'python': {'p': 1, 'y': 1, 't': 1, 'h': 1, 'o': 1, 'n': 1}
}

 

여기서 d['hello']는 "hello"라는 단어의 각 문자 빈도를 저장하는 사전이며 📖, d['hello']['h']는 "h" 문자의 출현 횟수를 나타내죠 📈.

 

예제 2️⃣: 날짜별 날씨 정보 딕셔너리 ☀️🌧️

파이썬의 defaultdict를 사용하면 날짜별로 날씨 정보를 저장하는 복잡한 데이터 구조도 쉽게 관리할 수 있습니다. 아래는 이를 활용한 예제 코드입니다:

 

from collections import defaultdict

# defaultdict 생성 (날짜 -> 날씨 정보 리스트)
weather_info = defaultdict(lambda: defaultdict(list))

# 날짜와 날씨 데이터를 순회하며 정보 저장
for date, weather in [
    ('2023-07-20', '맑음'),
    ('2023-07-20', '흐림'),
    ('2023-07-20', '비'),
    ('2023-07-21', '맑음'),
    ('2023-07-21', '구름 조금'),
]:
    weather_info[date].append(weather)

print(weather_info)

 

실행 결과는 다음과 같은 구조를 가진 딕셔너리를 만들어냅니다:

{
 '2023-07-20': ['맑음', '흐림', '비'],
 '2023-07-21': ['맑음', '구름 조금']
}

 

 

여기서 weather_info['2023-07-20']는 2023년 7월 20일의 날씨 정보를 저장하는 리스트이며, 각각의 날씨 상태를 순차적으로 담고 있습니다. 🌦️

 

이 구조를 사용하면, 주어진 날짜에 대한 날씨 정보가 없을 경우 자동으로 빈 리스트를 기본값으로 할당하므로, 새로운 날 정보를 추가할 때 별도의 초기화 코드 없이 바로 리스트에 추가할 수 있습니다. 이는 코드를 더욱 깔끔하고 오류를 줄일 수 있는 방법입니다. 🚀

 

예를 들어, 다음과 같이 날짜별로 날씨 상태를 추가하고 싶다면:

 

# '2023-07-22' 날짜에 대한 날씨 정보 추가
weather_info['2023-07-22'].append('구름 많음')
weather_info['2023-07-22'].append('가능성 있는 소나기')

 

이렇게 defaultdict를 사용하면, '2023-07-22'라는 새로운 키에 자동으로 빈 리스트가 할당되고, 그 리스트에 날씨 정보가 추가됩니다. 결과적으로 weather_info 딕셔너리는 다음과 같이 업데이트됩니다:

 

{
 '2023-07-20': ['맑음', '흐림', '비'],
 '2023-07-21': ['맑음', '구름 조금'],
 '2023-07-22': ['구름 많음', '가능성 있는 소나기']
}

이렇게 defaultdict를 활용하면, 복잡한 데이터를 쉽고 효율적으로 관리할 수 있어서, 데이터를 다루는 파이썬 프로그래머에게 매우 유용한 도구가 됩니다. ⛅🌈👍

반응형