본문 바로가기

python

python - Map(딕셔너리) 자료구조 생성, 특징 및 예제

키-값 데이터 구조

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]가 참인 값만...