파이썬에서 딕셔너리는 기본적으로 키-값 쌍으로 이루어진 자료구조입니다. 딕셔너리를 확장하여 다차원 자료구조로 사용할 수 있으며, 이를 통해 보다 복잡한 계층적 데이터를 관리할 수 있습니다. 딕셔너리를 상속하거나 중첩하여 다차원 데이터를 관리하는 방식은 매우 유용합니다. 아래에서는 파이썬 딕셔너리의 상속 및 다차원 구조에 대한 설명과 예제를 제시합니다.
1. 파이썬 딕셔너리 상속
파이썬에서 클래스 상속을 통해 딕셔너리의 기능을 확장할 수 있습니다. 기본적으로 파이썬 딕셔너리 클래스인 dict
를 상속받아 커스텀 딕셔너리를 구현할 수 있습니다.
예제: 딕셔너리 상속
# 딕셔너리를 상속한 CustomDict 클래스 정의
class CustomDict(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 특정 키가 없을 때 기본값을 반환하는 메서드 추가
def get_with_default(self, key, default=None):
return self.get(key, default)
# 딕셔너리 내용 출력하기
def print_dict(self):
for key, value in self.items():
print(f"{key}: {value}")
# CustomDict 사용 예제
my_dict = CustomDict({"a": 1, "b": 2})
# 기본적인 딕셔너리 기능 사용
print(my_dict["a"]) # 출력: 1
# 추가한 메서드 사용
print(my_dict.get_with_default("c", 0)) # 출력: 0 (키 "c"가 없으면 0 반환)
# 딕셔너리 내용 출력
my_dict.print_dict() # 출력: a: 1, b: 2
위 코드에서 CustomDict
클래스는 기본 dict
클래스를 상속받아 새로운 메서드를 추가하거나 기능을 확장했습니다. 이처럼 딕셔너리를 상속하면 커스텀 기능을 추가할 수 있습니다.
2. 다차원 자료구조로 딕셔너리 사용
딕셔너리를 중첩하여 다차원 자료구조로 사용할 수 있습니다. 딕셔너리 내에 또 다른 딕셔너리를 값으로 저장하면, 이를 통해 트리나 복잡한 계층적 구조를 쉽게 관리할 수 있습니다.
예제: 중첩 딕셔너리
# 중첩된 딕셔너리 (다차원 자료구조)
multi_dim_dict = {
"사용자1": {
"이름": "홍길동",
"나이": 30,
"취미": ["독서", "등산"]
},
"사용자2": {
"이름": "이순신",
"나이": 40,
"취미": ["낚시", "영화 감상"]
},
}
# 중첩된 딕셔너리 값에 접근
print(multi_dim_dict["사용자1"]["이름"]) # 출력: 홍길동
print(multi_dim_dict["사용자2"]["취미"]) # 출력: ['낚시', '영화 감상']
# 새로운 데이터 추가
multi_dim_dict["사용자3"] = {
"이름": "강감찬",
"나이": 50,
"취미": ["게임", "여행"]
}
print(multi_dim_dict["사용자3"]) # 출력: {'이름': '강감찬', '나이': 50, '취미': ['게임', '여행']}
이 예제에서는 딕셔너리를 중첩하여 사용자 정보를 저장하고, 다차원 데이터처럼 관리합니다. 각 사용자는 딕셔너리로 표현되고, 딕셔너리 안에 다시 이름, 나이, 취미 등이 딕셔너리나 리스트로 표현되어 있습니다.
3. 재귀적으로 생성되는 다차원 딕셔너리
딕셔너리를 사용할 때, 재귀적으로 구조를 확장하여 자동으로 다차원 딕셔너리를 생성할 수 있습니다. 이를 위해 파이썬의 collections.defaultdict
를 사용할 수 있습니다.
예제: defaultdict
를 이용한 재귀적 딕셔너리
from collections import defaultdict
# 재귀적으로 다차원 딕셔너리를 만드는 함수
def recursive_defaultdict():
return defaultdict(recursive_defaultdict)
# 다차원 딕셔너리 생성
multi_level_dict = recursive_defaultdict()
# 데이터 추가
multi_level_dict["level1"]["level2"]["level3"] = "다차원 데이터"
# 값 확인
print(multi_level_dict["level1"]["level2"]["level3"]) # 출력: 다차원 데이터
위 코드에서는 defaultdict
를 사용해 딕셔너리의 값을 자동으로 재귀적으로 생성하여, 여러 단계의 계층을 가진 다차원 자료구조를 손쉽게 구현합니다.
4. 딕셔너리 기반의 다차원 데이터 접근 및 수정
다차원 딕셔너리를 사용할 때, 데이터의 접근 및 수정을 효율적으로 처리할 수 있는 도구를 만들어 사용할 수 있습니다.
예제: 중첩된 딕셔너리에서 값 추가 및 업데이트
# 중첩 딕셔너리에서 값을 추가하거나 업데이트하는 함수
def update_nested_dict(d, keys, value):
for key in keys[:-1]:
d = d.setdefault(key, {})
d[keys[-1]] = value
# 다차원 딕셔너리
nested_dict = {
"a": {
"b": {
"c": 1
}
}
}
# 값을 추가하거나 업데이트
update_nested_dict(nested_dict, ["a", "b", "d"], 2)
update_nested_dict(nested_dict, ["a", "e"], 3)
# 결과 출력
print(nested_dict)
# 출력: {'a': {'b': {'c': 1, 'd': 2}, 'e': 3}}
이 함수는 다차원 딕셔너리에서 여러 단계의 키를 통해 값을 추가하거나 수정할 수 있도록 해줍니다. 이를 통해 딕셔너리의 계층 구조에서 원하는 위치에 데이터를 추가할 수 있습니다.
결론
- 딕셔너리 상속을 통해 파이썬의 기본
dict
클래스에 새로운 기능을 추가하거나 커스터마이징 할 수 있습니다. - 중첩 딕셔너리는 다차원 데이터를 표현하는 유용한 방법이며, 딕셔너리를 중첩하여 복잡한 계층적 구조를 쉽게 관리할 수 있습니다.
defaultdict
를 사용하면 재귀적으로 다차원 딕셔너리를 생성하여 보다 유연한 데이터 구조를 구현할 수 있습니다.- 딕셔너리의 다차원 구조에서 값을 접근하고 수정하는 함수를 작성하면 데이터 관리가 더욱 쉬워집니다.
'다차원 자료구조 생성 및 방법' 카테고리의 다른 글
[다차원 자료구조 생성 및 방법] 다차원 자료구조 기반 워드클라우드 모델 (0) | 2024.10.30 |
---|---|
[다차원 자료구조 생성 및 방법] 리스트 상속 다차원 자료구조 2 (7) | 2024.10.26 |
[다차원 자료구조 생성 및 방법] 다차원 자료구조 표현 도구 텐서(Tensor) (1) | 2024.10.22 |
[다차원 자료구조 생성 및 방법] 네임드 튜플 `collections` 모듈 자료구조 (11) | 2024.10.21 |
[다차원 자료구조 생성 및 방법] 파이썬에서의 벡터 공간 (4) | 2024.10.19 |