가독성과 단순성으로 유명한 파이썬은 다양한 데이터 구조를 제공합니다. 그 중에서 딕셔너리는 매우 효율적인 컨테이너 구조입니다. 이번 포스팅에서는 파이썬 딕셔너리 구조를 탐색하고, 해당 기능 및 사용 사례에 대해서 알아 보겠습니다.
파이썬 딕셔너리 구조
파이썬 딕셔너리 소개
파이썬 딕셔너리는 순서가 지정되지 않은 key-value 쌍의 모음입니다. 리스트나 튜플과 같은 시퀀스와 달리 딕셔너리는 인덱스가 없습니다. 대신 빠르고 효율적인 데이터 검색을 위해 key를 사용합니다.
딕셔너리의 각 key는 고유해야 하며 특정 value와 연결되어 있습니다. 딕셔너리는 중괄호 {}를 사용하여 정의되며 key-value 쌍은 콜론으로 구분됩니다.
fruitPrices = {"apple": 1.0, "banana": 0.75, "cherry": 2.5}
이 예에서 fruitPrices는 각 과일이 key이고, 해당 가격이 연관된 value인 딕셔너리입니다.
파이썬 딕셔너리 값 출력
딕셔너리의 value는 해당 key를 사용하여 접근할 수 있습니다. 이를 통해 정보를 더 빠르고 직접적으로 검색할 수 있습니다.
applePrice = fruitPrices["apple"]
print(applePrice)
-------------------------------------
1.0
여기서, fruitPrices[“apple”]는 “apple” key와 연관된 value를 검색합니다.
딕셔너리 필수 작업
딕셔너리 key – value 추가
딕셔너리는 변경 가능하므로 key-value 쌍을 수정 및 추가할 수 있습니다.
# 새로운 key-value 쌍 추가
fruitPrices["orange"] = 1.2
# 기존 key에 해당하는 value 업데이트하기
fruitPrices["banana"] = 0.8
이 예에서는 “orange”에 대한 새 key-value 쌍을 추가하고 “banana”에 대한 value를 수정하여 딕셔너리를 업데이트합니다.
딕셔너리 key – value 제거
del 문은 딕셔너리에서 key-value 쌍을 제거하는 데 사용됩니다.
del fruitPrices["cherry"]
위 구문은 fruitPrices 딕셔너리에서 key가 “cherry”인 key-value 쌍을 삭제합니다.
딕셔너리 메소드
딕셔너리는 일반적인 작업을 용이하게 하는 다양한 방법을 제공합니다.
#딕셔너리의 모든 key를 리스트로 저장
keys = fruitPrices.keys()
keys
---------------------------------------------
dict_keys(['apple', 'banana', 'orange'])
#딕셔너리의 모든 value를 리스트로 저장
values = fruitPrices.values()
values
-----------------------------------------------
dict_values([1.0, 0.8, 1.2])
#key가 딕셔너리에 존재하는 지 여부 체크
isBananaPresent = "banana" in fruitPrices
isBananaPresent
-----------------------------------------------
True
이러한 메소드는 딕셔너리 데이터를 조작하는 편리한 방법을 제공합니다.
딕셔너리의 실제 적용
데이터 표현 및 변환
딕셔너리는 실제 시나리오에서 데이터를 표현하고 변환하는 데 사용됩니다. 학생에 대한 데이터를 추가하고 학생에 대한 추가 정보를 저장하려는 경우를 생각해 보겠습니다.
studentData = {
"철수": {"age": 20, "grade": "A"},
"유진": {"age": 22, "grade": "B"},
"진수": {"age": 21, "grade": "A-"}
}
위의 구문 각 학생의 이름이 key이고, 연관된 value는 나이, 학년 등의 세부 정보가 포함된 또 다른 딕셔너리입니다.
데이터 계산 및 집계
딕셔너리는 발생 횟수를 계산하고 데이터를 집계하는 데 탁월합니다. 투표 리스트가 있고 각 후보자의 투표 수를 계산하는 경우를 생각해 보겠습니다.
votes = ["Alice", "Bob", "Alice", "John", "Bob", "Alice", "Alice"]
votes_counts = {}
for candidates in votes:
if candidates in votes_counts:
votes_counts[candidates] += 1
else:
votes_counts[candidates] = 1
votes_counts
------------------------------------------------------------------------
{'Alice': 4, 'Bob': 2, 'John': 1}
위 코드는 각 후보자의 투표 수를 집계하여 투표 수(value)가 포함된 딕셔너니를 생성합니다.
딕셔너리 구성 및 설정
사전은 일반적으로 애플리케이션의 구성 설정을 저장하는 데 사용됩니다. 이를 통해 설정을 쉽게 검색하고 수정할 수 있습니다.
app_config = {
"language": "eng",
"theme": "dark",
"notifications": True
}
위 코드에서 app_config에는 기능의 다양한 설정이 포함되어 있으며 개발자는 필요한 것에 따라 설정에 쉽게 접근하거나 업데이트할 수 있습니다.
딕셔너리 사용에 대한 모범 사례
딕셔너리 설명 키 사용
명확하고 설명이 포함된 key를 선택하면 코드 가독성이 향상되고 다른 사람(또는 본인)이 각 key의 목적을 더 쉽게 이해할 수 있습니다.
# 설명이 적은 keys
student_data = {"s1": {"age":20, "grade": "A"}, "s2":{"age":22, "grade":"B"}}
# 더 많은 설명을 가지는 keys
student_data = {"John": {"age": 20, "grade": "A"}, "Alice": {"age":22, "grade":"B"}}
두 번째 코드는 명확하고 의미 있는 키를 제공하므로 바람직합니다.
딕셔너리 누락된 키 처리
딕셔너리의 값에 접근할 때 key가 누락될 수 있는 경우를 처리하려면 get() 메서드를 사용하는 것이 좋습니다.
# 누락된 key 처리를 하지 않는 경우
grade = student_data["Bob"]["grade"]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[2], line 2
1 # 누락된 key 처리를 하지 않는 경우
----> 2 grade = student_data["Bob"]["grade"]
KeyError: 'Bob'
# 누락된 key 처리를 하는 경우
grade = student_data.get("Bob", {}).get("grade", "Not available")
grade
---------------------------------------------------------------------------
'Not available'
get()을 사용하면 key가 없는 경우 기본값을 지정하여 오류를 방지할 수 있습니다.
해시 가능한 키 이해
딕셔너리 key는 해시 가능해야 합니다. 즉, 딕셔너리 key는 고정된 값을 가져야 합니다. 문자열, 숫자, 튜플(해시 가능한 요소만 포함하는 경우)과 같은 불변 데이터 유형이 key에 적합합니다. 리스트와 같은 변경 가능한 유형은 key에 적합하지 않습니다.
딕셔너리를 올바르게 사용하려면 key의 해시 가능성을 이해하는 것이 매우 중요합니다.
결론
Python의 딕셔너리는 매우 강력하고 유연한 데이터 구조 역할을 하며 데이터를 표현, 조작 및 변환하는 편리한 방법을 제공합니다. 정보를 정리하든, 발생 횟수를 계산하든, 설정 구성을 관리하든 딕셔너리는 다양한 솔루션을 제공합니다.
이 문서에서 논의된 기본 작업, 실제 응용 프로그램 및 모범 사례를 이해하면 Python 프로젝트에서 딕셔너리의 잠재력을 최대한 활용할 수 있습니다.