디지털미디어랩 머신러닝 여름캠프

2주차(2) : Python 기본 자료형 다루기 (Dictionary, Tuple, Set)

참고 자료

2. 딕셔너리(Dictionary)

  • 리스트가 순서로 자료를 저장한다면, 딕셔너리는 이름을 붙여서 자료를 저장한다.
  • 파이썬에서는 자료의 이름을 키(key)라고 하고 자료의 값을 값(value)라고 한다.
딕셔너리변수 = {자료이름1: 자료값1, 자료이름2: 자료값2, 자료이름3: 자료값3}
In [ ]:
b = {"math": 88, "english": 90, "history": 100}
print(b)
  • 딕셔너리 자료형 변수에서 특정한 자료를 꺼낼때도 마찬가지로 인덱싱(indexing) 연산을 한다.
  • 딕셔너리 자료형 변수에서 인덱싱 연산을 하는 경우에도 다음과 같이 대괄호(bracket)를 변수 이름 끝에 붙이고 그 안에 자료의 키를 넣는다.
In [ ]:
print(b["math"])
print(b["english"])
  • 파이썬에서는 자료의 키는 무엇이든 가능하다. 즉, 숫자도 키가 될 수 있다.
In [ ]:
b = {1: 10, 2: 20}

print(b[1])
print(b[2])
  • 딕셔너리는 프로그래머가 복잡한 데이터를 다룰 때 유용하다.
In [ ]:
scores = {"수학" : [50, 45, 65, 70, 80],
         "영어" : [90, 20, 55, 60, 75],
         "과학" : [20, 15, 65, 90, 95]}

print(scores)
print(scores["수학"])

english_average = sum(scores["영어"])/len(scores["영어"])
print("영어 평균점수는 " + str(english_average) + "점 입니다.")

딕셔너리와 반복문

  • 딕셔너리도 리스트와 마찬가지로 반복문을 이용할 수 있다.
In [ ]:
scores = {"수학" : [50, 45, 65, 70, 80],
         "영어" : [90, 20, 55, 60, 75],
         "과학" : [20, 15, 65, 90, 95]}

print("key 값을 읽어와 불러옴.")
for key in scores:
    print(key)
    print(scores[key])
    
for key in scores.keys():
    print(key)
    print(scores[key])
    
print("\nvalue 값을 읽어와 불러옴.")
for score in scores.values():
    print(score)

실습 2 : 학점 계산 프로그램 만들어보기

  • 주어진 자료를 활용하여 학점 평균을 계산하는 프로그램을 만들어보자.
In [ ]:
grade_per_lecture = {"현대디자인론" : 3,
                  "통합디자인연구" : 3,
                  "석사세미나" : 1,
                  "박사세미나" : 1,
                  "연구방법론" : 3,
                  "사용자인터페이스디자인연구" : 3}

grades = {"A+" : 4.3, "A0" : 4.0, "A-" : 3.7,
          "B+" : 3.3, "B0" : 3.0, "B-" : 2.7,
          "C+" : 2.3, "C0" : 2.0, "C-" : 1.7,
          "D+" : 1.3, "D0" : 1.0, "D-" : 0.7, "F" : 0.0}

my_grades = {"현대디자인론" : "A-", "석사세미나" : "C+", "연구방법론" : "B0", "사용자인터페이스디자인연구" : "B+"}

3. 튜플(Tuple)

  • 순서대로 정렬된 값들의 집합.
  • 리스트와 매우 비슷하다.
  • 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없다.
튜플변수 = (자료값1, 자료값2)
In [ ]:
a = (3, 5)
b = ("현대디자인론", "A+", 3)
c = (2, 5, (3, 9))

print(a[0])
print(b[1])
print(c[2][1])
  • 여러 변수를 동시에 인덱싱해야할 때 유용하다.
In [ ]:
grade_per_lecture = [("현대디자인론", 3),
                  ("통합디자인연구", 3),
                  ("석사세미나", 1),
                  ("박사세미나", 1),
                  ("연구방법론", 3),
                  ("사용자인터페이스디자인연구", 3)]

for name, grade in grade_per_lecture:
    print(name + " " + str(grade))
  • 함수에서 두 개 이상의 값을 반한하면 자동적으로 튜플을 리턴
In [ ]:
def two_largest_number(arr):
    first = max(arr)
    arr.remove(first)
    second = max(arr)
    return first, second

scores = [80, 90, 65, 82, 93, 79]

print(two_largest_number(scores))
  • 변수의 값을 서로 바꿀 때도 유용하다. (Swap)
In [ ]:
a = 50
b = 30

print(a, b)

a, b = b, a
print(a, b)

4. 집합(Set)

  • 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형.
  • 순서가 없다.
  • 자주 쓰이지는 않으니 알아두면 좋은 정도
집합변수명 = {집합자료1, 집합자료2, 집합자료 3}
In [ ]:
a = {5, 3, 2}
b = {3, 5, 10}

print(a)
print(b)
In [ ]:
print(a&b)
print(a|b)
print(a-b)

자료형간의 변환

  • 각 자료형 마다 list(), dict(), tuple(), set() 함수를 통해 서로 변환이 가능하다.
  • 딕셔너리가 다른 자료형으로 변환되는 경우는 key값으로 변환되며, 다른 자료형이 딕셔너리로 변환시에는 key와 value값이 동시에 입력되어야 한다.
In [ ]:
l = [5, 6, 7, 8, 8, 9, 9]
d = {"a" : 5, "b" : 6, "c" : 7}
t = (5, 6)
s = {8, 9, 3}

k = ["a", "b", "c", "d", "e", "f", "g"]

print(list(d), list(t), list(s))
print(dict(keys = k, values = l))
print(tuple(l), tuple(d), tuple(s))
print(set(l), set(d), set(t))