파이썬 기초

[ 파이썬 기초 ] 12. 딕셔너리 (해쉬)

외양간찾는 새끼소 2025. 3. 6. 23:35

1. 손콩떡의 점수는?

학생들 이름이 담겨있는 students 리스트와 학생들의 점수가 담겨있는 scores 리스트가 있습니다. 손콩떡 학생의 점수를 출력해 주세요.

< 정답 코드 >

students = ["이선호", "김대호", "손콩떡"]
scores = [90, 60, 75]

son_index = students.index("손콩떡")
print(scores[son_index])

2. 딕셔너리 선언방법

위의 문제처럼 이름-점수 같이 매칭이 되는 데이터들이 많이 있습니다. 이런 경우 여러개의 리스트를 사용하기 보다는 딕셔너리를 이용하면 훨씬 간단하고 편하게 데이터를 저장할 수 있습니다.

student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}

{} 괄호를 사용하면 딕셔너리를 선언 할 수 있습니다. 딕셔너리안 요소는 ‘:’ 을 사용하여 매칭 관계를 선언합니다. 이때 :의 왼쪽 값을 키(key) 오른쪽 값을 벨류(value) 라고 부릅니다.


3. 딕셔너리 값 가져오기

이제 딕셔너리로 선언된 데이터에서 손콩떡 점수를 출력하는 코드를 알아봅시다.

student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}

print(student_score["손콩떡"])

딕셔너리 명[”키 값”] 을 하면 키 값에 매칭된 벨류 값을 반환해줍니다. 반대로 딕셔너리 명[”벨류 값”] 을 하면 에러가 발생해요… 딕셔너리는 키를 통해 벨류를 가져올 수 있는 구조 입니다.

딕셔너리의 함수 중 get() 을 통해서도 값을 가져올 수 있습니다.

student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}

print(student_score.get("손콩떡"))
💡딕셔너리명[”키값”] VS 딕셔너리명.get(”키값”)
딕셔너리명[”키값”] 은 딕셔너리에 해당 키값이 존재하지 않으면 오류를 발생시킵니다.
student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}

print(student_score["coding"])​

하지만 딕셔너리명.get(”키값”) 은 딕셔너리에 해당 키 값이 존재하지 않으면 None을 반환합니다.
student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}

print(student_score.get("coding"))​

 


4. 딕셔너리에 값 추가하기 & 수정하기

새로운 학생인 “킹율”이 왔습니다. 이 학생은 아직 시험을 치르지 않았으니 점수가 없다는 의미의 None 값으로 저장합시다.

student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}

student_score["킹율"] = None

print(student_score)

수정도 같은 방법으로 할 수 있습니다

student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}

student_score["손콩떡"] = 40

즉, 딕셔너리명[”키값”] = 벨류값 은 키값이 존재하면 수정되고 키값이 존재하지 않으면 새로 생성됩니다.


5. 딕셔너리 요소 삭제하기

“이선호”가 졸업했어요. ”이선호”값을 삭제하는 방법을 알아봅시다.

# pop() 사용법
student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}
student_score.pop("이선호")

# del 사용법
student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}
del student_score["이선호"]

리스트와 마찬가지로 pop() 과 del 을 통해 삭제할 수 있습니다.


6. 딕셔너리 와 리스트

“이선호”, “김대호”, “손콩떡” 학생들이 각각 영어 수학 점수를 아래와 같이 받았습니다.

수학 영어

이선호 90 70
김대호 40 50
손콩떡 70 90

이 데이터를 딕셔너리를 이용해 저장하는 방법을 알아봅시다.

student_score = {
	"이선호" : [90, 70],
	"김대호" : [40, 50],
	"손콩떡" : [70, 90],
}

print(f"이선호의 영어 성적 : {student_score['이선호'][1]}")
print(f"손콩떡의 수학 성적 : {student_score['손콩떡'][0]}")

이런 식으로 리스트를 벨류자리에 넣어서 표현할 수 있습니다.

💡 딕셔너리 내 줄 바꿈
딕셔너리 내 줄 바꿈은 아무런 영향이 없습니다. 줄바꿈 해도 정상작동, 안 해도 정상작동 합니다. 보통은 줄 바꿈을 해줌으로써 코드를 좀 더 보기 좋게 적습니다.

7. 연습문제

Q1. 다음 중 딕셔너리를 올바르게 선언한 코드는 무엇인가요?

## 선택지
a) scores = ["이선호": 90, "김대호": 60]

b) scores = {"이선호": 90, "김대호": 60}

c) scores = ("이선호": 90, "김대호": 60)

d) scores = {"이선호", 90, "김대호", 60}

Q2. 아래 딕셔너리가 주어졌을 때, "손콩떡"의 점수를 출력하는 올바른 방법은 무엇인가요?

student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}

## 선택지
a) print(student_score["손콩떡"])

b) print(student_score[75])

c) print(student_score("손콩떡"))

d) print(student_score.get["손콩떡"])

Q3. 다음 코드의 실행 결과로 옳은 것은 무엇인가요?

student_score = {"이선호": 90, "김대호": 60}
student_score["김대호"] = 70
student_score["손콩떡"] = 75
print(student_score)

## 선택지
a) {"이선호": 90, "김대호": 60, "손콩떡": 75}

b) {"이선호": 90, "김대호": 70, "손콩떡": 75}

c) {"이선호": 90, "김대호": 70}

d) 오류 발생

Q4. 다음 코드에서 "이선호"를 삭제한 후의 결과는 무엇인가요?

student_score = {"이선호": 90, "김대호": 60, "손콩떡": 75}
del student_score["이선호"]
print(student_score)

## 선택지 
a) {"김대호": 60, "손콩떡": 75}

b) {"이선호": None, "김대호": 60, "손콩떡": 75}

c) {"김대호": 60}

d) 오류 발생

Q5. 다음 딕셔너리에서 "김대호"의 영어 성적을 출력하는 코드는 무엇인가요?

# 수학, 영어 순서입니다.
student_score = {
    "이선호": [90, 70],
    "김대호": [40, 50],
    "손콩떡": [70, 90]
}

## 선택지
a) print(student_score["김대호"][1])

b) print(student_score["김대호"][0])

c) print(student_score[1]["김대호"])

d) print(student_score.get("김대호", 1))