키-값 데이터 구조
Python에서 딕셔너리는 데이터를 키-값(key-value) 쌍으로 저장하는 자료형으로 키를 사용해 값에 빠르게 접근할 수 있는 데이터 구조이다.
JSON 데이터와 유사한 형태로 데이터를 다룰 수 있어 직관적이다.
딕셔너리는 가변 데이터 타입으로 요소의 추가, 수정, 삭제가 가능하다.
1.Map(딕셔너리) 생성
중괄호 { } 또는 dict() 함수를 사용하여 생성할 수 있다.
dict_name = {키 : 값, 키1 : 값1}
중괄호 {}를 사용
student = {"name": "Alice", "age": 25, "grade": "A"}
empty_dict = {}
dict() 생성자 사용
person = dict(name="Bob", age=30)
print(student) # {'name': 'Alice', 'age': 25, 'grade': 'A'}
print(empty_dict) # {}
print(person) # {'name': 'Bob', 'age': 30}
2. Map(딕셔너리)의 특징
- 키-값(key-value) 쌍으로 구성:
- 키: 고유하고 불변한 데이터 타입(예: 문자열, 숫자, 튜플). (리스트, 딕셔너리 등 가변 객체는 불가능)
- 값: 중복 가능
student = {"name": "Alice", "age": 25}
- 가변 데이터 타입: 요소 추가, 수정, 삭제 가능.
- 고유한 키와 그에 대응하는 값.
3. 자주 사용되는 딕셔너리 메소드
메소드 | 설명 | 예제 |
keys() | 딕셔너리의 모든 키 반환 | d.keys() |
values() | 딕셔너리의 모든 값 반환 | d.values() |
items() | 키-값 쌍을 반환 | d.items() |
get(key, default) | 키에 해당하는 값을 반환(없으면 기본값 반환) | d.get('name', 'Unknown') |
update(other) | 다른 딕셔너리를 병합하거나 키-값 쌍 추가 | d.update({'age' : 26}) |
pop(key, default) | 특정 키의 값을 제거하고 반환(없으면 ㅣ본값 반환) | d.pop('age', 'Not Found') |
popitem() | 마지막 키-값 쌍 제거 및 반환 | d.popitem() |
clear() | 모든 요소 제거 | d.clear() |
setdefault(key, default) | 키의 값을 반환하고, 없으면 기본값으로 추가 | d.setdefault('grade', 'B') |
fromkeys(iterable, value) | 키의 목록으로 딕셔너리 생성 | dict.fromkeys(['a', 'b'], 0) |
4. Map(딕셔너리)활용 예제
(1) 요소 접근 및 추가, 수정
student = {"name": "Alice", "age": 25}
# 키를 사용해 값에 접근
print(student["name"]) # Alice
# 요소 추가 및 수정
student["grade"] = "A"
print(student) # {'name': 'Alice', 'age': 25, 'grade': 'A'}
student["age"] = 26 # 값 수정
print(student) # {'name': 'Alice', 'age': 26, 'grade': 'A'}
(2) get() 메소드로 값 가져오기
student = {"name": "Alice", "age": 25}
# 키가 존재하면 값을 반환, 없으면 기본값 반환
print(student.get("name", "Unknown")) # Alice
print(student.get("grade", "Not Assigned")) # Not Assigned
(3) 키와 값, 키-값 쌍 조회
student = {"name": "Alice", "age": 25, "grade": "A"}
# keys(): 모든 키 반환
print(student.keys()) # dict_keys(['name', 'age', 'grade'])
# values(): 모든 값 반환
print(student.values()) # dict_values(['Alice', 25, 'A'])
# items(): 모든 키-값 쌍 반환
print(student.items()) # dict_items([('name', 'Alice'), ('age', 25), ('grade', 'A')])
(4) 요소 삭제
student = {"name": "Alice", "age": 25, "grade": "A"}
# 특정 요소 제거 (키를 기준으로)
student.pop("grade")
print(student) # {'name': 'Alice', 'age': 25}
# 마지막 요소 제거
student.popitem()
print(student) # {'name': 'Alice'}
# 모든 요소 제거
student.clear()
print(student) # {}
(5) 딕셔너리 병합
student = {"name": "Alice", "age": 25}
new_data = {"grade": "A", "school": "XYZ"}
# update()로 병합
student.update(new_data)
print(student) # {'name': 'Alice', 'age': 25, 'grade': 'A', 'school': 'XYZ'}
5. Map(딕셔너리)와 관련된 집합 연산
(1) 키의 집합 연산
a = {"name": "Alice", "age": 25}
b = {"age": 30, "grade": "A"}
# 교집합
print(a.keys() & b.keys()) # {'age'}
# 차집합
print(a.keys() - b.keys()) # {'name'}
# 합집합
print(a.keys() | b.keys()) # {'name', 'age', 'grade'}
(2) 값 비교
# 특정 값이 딕셔너리의 값에 있는지 확인
print(25 in a.values()) # True
print("Alice" in a.values()) # True
print(100 in a.values()) # False
6. Map 응용 예제
(1) 단어 빈도수 계산
text = "apple banana apple cherry banana apple"
word_count = {} #빈 딕셔너리 생성
for word in text.split(): #text를 공백 기준으로 나누어 word에 할당
word_count[word] = word_count.get(word, 0) + 1
#word_count 딕셔너리에 해당 단어가 있다면 기존 값에 +1, 없다면 기본값인 0에 +1 하여 저장
print(word_count)
# {'apple': 3, 'banana': 2, 'cherry': 1}
(2) 두 딕셔너리 비교
dict1 = {"a": 1, "b": 2, "c": 3}
dict2 = {"b": 2, "c": 4, "d": 5}
# 공통 키와 그 값
common = {k: dict1[k] for k in dict1.keys() & dict2.keys() if dict1[k] == dict2[k]}
print("공통 키와 값:", common) # {'b': 2}
* dict1.keys() & dict2.keys() : dict1과 dict2의 공통 key 값 = b, c
* for k in dict1.keys() & dict2.keys() : b, c에 대해 반복 (k에 b, c가 들어감)
* if dict1[k] == dict2[k] : 반복문 안에서 각 공통 키k에 대해 dict1[k]와 dict2[k]의 값이 같은지 비교
k가 b일때는 참, c일때는 거짓
* common = {k: dict1[k] for k in dict1.keys() & dict2.keys() if dict1[k] == dict2[k]} : k와 dict1[k] 값을 common 딕셔너리에 추가 - dict1[k] == dict2[k]가 참인 값만...
'python' 카테고리의 다른 글
python - 시간복잡도(Time Complexity)와 예제 (0) | 2025.01.25 |
---|---|
python - 탐욕법, 그리디 알고리즘 (Greedy Algorithm) (2) | 2025.01.25 |
python - sort와 sorted의 차이와 정렬 방법, 사용 예시 (0) | 2025.01.24 |
python - Set(집합)의 생성에서 응용 예제까지 (0) | 2025.01.24 |
python - map 함수 기본 문법 및 예제 (0) | 2025.01.24 |