python

파이썬 자료형 - (3) 딕셔너리 dictionary

햇농nongnong 2021. 12. 8. 15:52

(이 글은 '언어와정보처리' 과목에서 '파이썬 기초' 수업 내용을 정리한 글이다.)

 

pytorch 에 대해 들어가기 전, python 기초를 간단하게 리뷰하고 넘어가려한다.

 

자료형

- 숫자 (Numbers) 

- 문자열 (Strings)

- 리스트 (Lists)

- 튜플 (Tuples)

- 딕셔너리 (Dictionaries)

- 집합 (Sets)

- 불 (Boolean)

 

위의 자료형 중 딕셔너리에 대해 알아보자.

 

딕셔너리 (Dictionary)

- {key:value} 형태로 된 자료 구조

- 사전에서 단어 뜻 검색하는 것처럼, 검색어(key)와 결과(value)가 쌍으로 존재하는 형태

- 구성요소를 찾을 때 리스트는 인덱스를 통해 찾지만, 딕셔너리는 key 값만 있으면 바로 확인 가능

--> 리스트는 처음부터 순서대로 하나씩 체크하기 때문에 key 값으로 바로 value 값을 반환하는 딕셔너리에 비해 상대적으로 느림

- key숫자형과 문자형으로 나타낼 수 있고, value 는 숫자형, 문자형, 리스트 등으로 다양하게 나타낼 수 있음. 

d1 = {'a':1, 'b':2}
d2 = {'a':[1,2,3], 'bc':123, 10:'aaa'}

- key를 통한 value 호출

--> 딕셔너리의 기본 사용 방식 : key --> [딕셔너리] --> value 

--> 딕셔너리[key]

d = {'a':1, 'b':2}
v_1 = d['a']
v_2 = d['b']
print(v_1, v_2)

결과 : 1 2

 

딕셔너리에 key-value pair 추가

- 딕셔너리에 새로운 key-value 쌍을 등록하기

- key 를 통한 value 를 호출할 때 처럼, 딕셔너리[새로운 key] = 새로운 value 형태로 추가

- 딕셔너리에 없는 key 를 사용해야 새로 추가가 되고, 이미 있는 key 에 새로운 value 쌍을 만들면 기존 key-value 의 value 가 새로운 value 로 덮어쓰기

d = {'a':1, 'b':2}
d['c'] = 3
print(d)

결과 : {'a' : 1, 'b' : 2, 'c' : 3}

d = {'a':1, 'b':2}
d['b'] = 3
print(d)

결과 : {'a' : 1, 'b' : 3}

 

 

딕셔너리 예제 문제 1

my_data = {'name' : 'Python', 'age' : '23', 'job' : ['student', 'programmer']} 라는 딕셔너리가 있다. 이 딕셔너리를 사용하여 다음 문자열을 출력하시오. (단, %d, %s, %f 또는 .format() 을 사용하여 정보를 입력할 것)

"My name is Python. I am 23 years old. I am a student and also a programmer."

 

my_data = {'name':'Python', 'age':23, 'job':['student', 'programmer']}
string = "My name is {}. I am {} years old. I am a {} and also a {}.".format(my_data['name'], my_data['age'], my_data['job'][0], my_data['job'][1])
print(string)

결과 : My name is Python. I am 23 years old. I am a student and also a programmer.

 

my_data = {'name':'Python', 'age':23, 'job':['student', 'programmer']}

name = my_data['name']        # name = 'Python'
age = my_data['age']          # age = 23
job1 = my_data['job'][0]      # job1 = 'student'
job2 = my_data ['job'][1]     # job2 = 'programmer'

sent = "My name is {}. I am {} years old. I am a {} and also a {}.".format(name, age, job1, job2)
print(sent)

결과 : My name is Python. I am 23 years old. I am a student and also a programmer.

 

딕셔너리 예제 문제 2

- A+ : 4.3, A0 :  4.0, A- : 3.7, B+ : 3.3, B0 : 3.0

- 위의 점수표를 딕셔너리 형태로 만든 후, Python 학생의 평균 점수를 계산해보기.

Python 학생의 점수 : 과목1 - A0, 과목2 - B0, 과목3 - A+, 과목4 - A0, 과목5 - A-

grade_dict = {'A+' : 4.3, 'A0' : 4.0, 'A-' : 3.7, 'B+' : 3.3, 'B0' : 3.0}
Python = ['A0', 'B0', 'A+', 'A0', 'A-']

score = 0
for i in range(5):
    score = score + grade_dict[Python[i]]
    
python_average = score / 5
print(python_average)

 

자료형 나머지

- 튜플 (Tuples) : 리스트와 비슷하지만 element 를 바꿀 수 없음

# 튜플 - 리스트와 비슷하지만 element 바꿀 수 없음
l = [1, 2, 3]
t = (1, 2, 3)

l[0] = 'a'      # l = ['a', 2, 3]
t[0] = 'a'      # 불가

TypeError: 'tuple' object does not support item assignment

 

- 집합 (Sets) : one of a kind

# 집합
a = [1, 1, 2, 3, 3, 3]
print(a)

b = set(a)
print(list(b))

 

[1, 1, 2, 3, 3, 3]
[1, 2, 3]

 

- 불 (Boolean) : TRUE 또는 FALSE

# boolean
1 == 1

True

1 != 0

True

1 == 0

False

 

 

 

자료형 마무리

  • 핵심 재료 : 숫자형 & 문자형
  • 재료를 담는 그릇 : 리스트 & 딕셔너리

 

데이터를 다룰 때

  • 항상 데이터의 종류가 무엇인지 파악하기 (데이터의 입출력 시 데이터의 종류 파악)
    ex) 겉으로 3으로 보여도 3 (integer) 과 "3" (string) 은 다름! 출력시에는 " " 표시가 나타나지 않기 때문에 주의
  • 데이터의 종류에 맞는 메소드(method) 몇 가지는 기억해두기
    ex) append 메소드는 리스트에 사용. 딕셔너리에서는 사용할 수 없음
    ex) split 메소드는 문자열에 사용. 리스트나 숫자에서는 사용할 수 없음