프로그래머스 파이썬 입문_10차시 딕셔너리와 듀플

리냥·2022년 5월 24일
0

프로그래머스 파이썬 입문_10차시 딕셔너리와 듀플


1-1. 딕셔너러

  • 여러 값을 저장해 두고 필요한 값을 꺼내 쓰는 기능
  • 이름표를 이용하여 값을 꺼내 사용
  • 사용할 때는 리스트와 비슷한 방식
wintable = {
    '가위' : '보',
    '바위' : '가위',
    '보' : '바위',
}

print(wintable['가위'])

1-2. 딕셔너리 실습 하기

  • 문제
월을 이름표로 가지고, 그 달에 있는 날짜 수를 값으로 가지는 딕셔너리를 만들어서 days_in_month에 저장해 보세요.
  • 코드
days_in_month = {
    '1월' : 31,
    '2월' : 28,
    '3월' : 31 
 }

print(days_in_month)
  • 출력
	{'1월': 31, '2월': 28, '3월': 31}

예제2

  • 문제
딕셔너리의 이름표에는 문자열과 숫자형, 튜플을 사용할 수 있으며, 값으로는 어떤 자료형이 오던 상관 없습니다. 이번 문제에서는 값에 들어갈 자료형으로 리스트를 사용할 수 있음을 보여줍니다. 다음 코드를 실행해서 확인해 보세요.
  • 코드
#            ↓ 이름표는 문자열 또는 숫자를 주로 사용하지만
dict = {     "이름표"    :    [1,2,3] }
#                           ↑ 값은 리스트를 포함해서 무엇이든 올 수 있습니다.

print( dict["이름표"] )

2-1. 딕셔너리 수정하기

  • 추가
    dict['three'] = 3
  • 수정
    dict['one'] = 11
  • 삭제
    del(dict['one']) dict.pop('two')
for i in range(5):
	print(i)
  • enumerate는 리스트가 있는 경우 순서와 리스트의 값을 전달하는 기능
names = ['철수', '영희', '영수']
for i, name in enumerate(names):
	print('{}번 : {}'.format(i+1, name))

2-2. 딕셔너리 수정하기 실습 하기

예제1

  • 문제
days_in_month에는 2월이 28일까지 있다고 만들어져 있는데요. 알고보니 2016년에는 2월이 29일까지 있습니다. "2월"이라는 이름표가 가지는 값을 29로 수정해 보세요. (단, 첫번째 줄은 수정하지 마세요)
  • 코드
days_in_month = {"1월":31, "2월":28, "3월":31}
days_in_month["2월"] =29
print(days_in_month)
  • tip
dict['one' : 1, 'two' : 2]

dict['three'] = 3    # 값을 추가합니다  {'one' : 1, 'two' : 2, 'three' : 3}
dict['one'] = 11     # 값을 수정합니다  {'one' : 11, 'two' : 2, 'three' : 3}

예제2

  • 문제
days_in_month에는 엉뚱하게도 -1월이라는 이름표와 값이 있는데요. 이 값을 지워보세요. (단, 첫번째 줄은 수정하지 마세요)
  • 코드
days_in_month = {"1월":31, "2월":28, "3월":31,"-1월":97889789}
del(days_in_month["-1월"])
  • tip
dict['one' : 1, 'two' : 2]

dict['three'] = 3    # 값을 추가합니다  {'one' : 1, 'two' : 2, 'three' : 3}
dict['one'] = 11     # 값을 수정합니다  {'one' : 11, 'two' : 2, 'three' : 3}
del(dict['one'])     # 값을 삭제합니다  {'two' : 2, 'three' : 3}
dict.pop('two')      # 값을 삭제합니다  {'three' : 3}

3-1. 딕셔너리와 반복문

  • 경우에 따라 가져올 값을 정할 수있다.
for key in ages.keys(): # keys() 생략 가능
    print(key)
for value in ages.values():
    print(value)
  • key와 value 둘다 가져올 수 있다.
for key, value in ages.items():
    print('{}의 나이는 {} 입니다'.format(key, value))
  • 딕셔너리는 값의 순서를 지키지 않는다.

3-2. 딕셔너리 수정하기 실습 하기

예제1

  • 문제
for in문을 이용해서 days_in_month의 이름표(key)를 한줄씩 출력해 보세요.

딕셔너리를 반복문에서 활용하는 방법을 알아봅시다. 딕셔너리의 반복문에서는 경우에 따라 key를 가져올 수도 있고 값을 가져올 수도 있습니다. 아래의 예를 참고하여 문제를 해결해 보세요.
  • 코드
days_in_month = {"1월":31, "2월":28, "3월":31, "4월":30, "5월":31}

for key in days_in_month.keys():
    print(key)
  • tip
ages = {'Tod' : 35, 'Jane' = 23, 'Paul' : 62}

for key in ages.keys():      # keys() 생략 가능
    print(key)               # Tod, Jame, Paul이 출력됩니다.

for value in ages.values():
    print(value)             # 62, 23, 35가 출력됩니다.

예제2

  • 문제
days_in_month의 각 이름표와 값을 다음과 같은 형식으로 출력해 보세요.

1월은 31일이 있습니다.
2월은 28일이 있습니다.
...
정확한 출력 형식은 작성되어 있는 print함수를 참고하세요.

  • 코드
days_in_month = {"1월":31, "2월":28, "3월":31, "4월":30, "5월":31}

for key, value in days_in_month.items():
    print("{}은 {}일이 있습니다.".format(key, value) )
  • tip
    딕셔너리의 반복문에서는 key와 value를 선택해서 가져올 수 있었지요. 이번 문제처럼 key와 value를 둘 다 가져와야 할 때에는 items()를 사용하면 됩니다. 아래의 예를 참고하여 문제를 해결해 보세요.
dages = {'Tod' : 35, 'Jane' : 23, 'Paul' : 62}

for key, value in ages.items():
    print('{}의 나이는 {} 입니다'.format(key, value))

4-1. 리스트와 비교

  • 리스트와 비교

4-2. 리스트와 비교 실습 하기

예제1

  • 문제
check_and_clear는 딕셔너리 타입의 box를 매개변수로 받는데요. 만약 box에 "불량품"이라는 이름표가 있으면 box 전체를 빈 딕셔너리로 만들어 버리고, 불량품이 없으면 box를 그대로 두는 함수입니다. 다음 코드를 수정해서 check_and_clear 함수를 완성하세요.
  • 코드
def check_and_clear(box):
    print("불량품이 있으면 box를 clear합니다.")

box1 = {"불량품" : 10}
check_and_clear(box1)
dict['{}']
print(box1)

box2 = {"정상품": 10}
check_and_clear(box2)
dict['box2']
print(box2)
  • tip
    딕셔너리 타입에 키가 있는지 확인하려면 in을 사용해 보세요.
    예를 들어, 딕셔너리에 'two'라는 키가 있는지 확인하려면
'two' in dict.keys()

또한 딕셔너리의 내용을 전부 삭제하고 싶다면 dict.clear()를 호출하면 된답니다.

예제2

  • 문제
products는 문방구에 진열되어 있는 상품과 가격 정보를 담고 있는 딕셔너리입니다. 문방구에서는 새로운 상품에 대한 정보를 catalog로 받는데요. catalog에는 이번에 새로 입고되는 상품과 가격이 적혀있고 또 기존 제품의 가격이 변경된 경우 그 가격정보를 담고 있습니다. products가 catalog의 정보를 반영하여, 앞으로 문방구에서 판매할 상품 정보를 갖는 딕셔너리가 되도록 코드를 완성하세요.
  • 코드
    딕셔너리에서 새로운 딕셔너리를 합치기 위해서는 update()를 사용합니다.
    예를 들어,
products = {"풀":800, "딱풀":1200, "색종이":1000,"색연필":5000,"스케치북":3500}

catalog = {"겨울용 실내화":12000, "잠자리채":8000, "딱풀":1400}

products.update(catalog)
  • tip
    딕셔너리의 반복문에서는 key와 value를 선택해서 가져올 수 있었지요. 이번 문제처럼 key와 value를 둘 다 가져와야 할 때에는 items()를 사용하면 됩니다. 아래의 예를 참고하여 문제를 해결해 보세요.
dages = {'Tod' : 35, 'Jane' : 23, 'Paul' : 62}

for key, value in ages.items():
    print('{}의 나이는 {} 입니다'.format(key, value))

5-1. 튜플 만들기

  • 한번 정해진 순서를 바꿀 수 없다.
  • 튜플 선언
tuple1 = (1, 2, 3, 4)

tuple2 = 1, 2, 3, 4

mylist = [1,2,3,4]
tuple3 = tuple(mylist)

-튜플은 값의 변경과 삭제가 불가능

5-2. 튜플 만들기 실습 하기

예제1

  • 문제
튜플은 여러가지 방식으로 만들수가 있습니다. 다음 코드를 실행해서 튜플이 만들어질 수 있는 다양한 방법을 확인해 보세요.
  • 코드
tuple1 = (1,2,3)
tuple2 = 1,2,3
list3 = [1,2,3]
tuple3 = tuple(list3)

if tuple1 == tuple2 == tuple3:
    print("tuple1과 tuple2와 tuple3은 모두 같습니다.")

예제2

  • 문제
튜플도 리스트와 마찬가지로 index로 값을 읽어올 수 있습니다. 현재 코드를 실행하면 0,1,2가 차례로 한 줄 씩 출력되지요. 코드의 3번째 줄 print문을 수정해서 tuple1의 값이 각각 한 줄 씩 출력되도록 만들어 보세요
  • 코드
    딕셔너리에서 새로운 딕셔너리를 합치기 위해서는 update()를 사용합니다.
    예를 들어,
products = {"풀":800, "딱풀":1200, "색종이":1000,"색연필":5000,"스케치북":3500}

catalog = {"겨울용 실내화":12000, "잠자리채":8000, "딱풀":1400}

products.update(catalog)
  • tip
    튜플이 리스트와 마찬가지로 index로 값을 읽어올 수 있다는 점을 이용해 문제를 해결해 봅시다. tuple1[0] = 11, tuple1[1] = 22, tuple1[2] = 33이므로 반복해서 출력할 수 있게 for in문을 이용해 문제를 해결해 보세요.
**tuple1 = (11, 22, 33)
for i in range( len( tuple1) ):
    print('i'.format(i+1,tuple1)**)

6-1. packing, un packing

  • packing
    하나의 변수에 여러개의 값을 넣는 것
  • unpacking
    패킹된 변수에서 여러개의 값을 꺼내오는 것
c = (3, 4)
d, e = c    # c의 값을 언패킹하여 d, e에 값을 넣었다
f = d, e    # 변수 d와 e를 f에 패킹
  • 튜플의 활용
    두 변수의 값을 바꿀 때 임시변수가 필요 없다.
    함수의 리턴 값으로 여러 값을 전달할 수 있다.

6-2. packing, un packing 실습 하기

예제1

  • 문제
x = 3 ,     y = 5
의 값을 가지고 있습니다. position이 x와 y값으로 이루어진 튜플이 되도록 packing해 보세요.
  • 코드
x = 3
y = 5

position = x,y

print("x, y로 이루어진 튜플 position의 값은 {}입니다.".format(position))
  • tip
    packing이란 하나의 변수에 여러개의 값을 넣는 것입니다.
    예를 들어,
a, b = 1, 2
c = a, b      #c = (1, 2)

또한 딕셔너리의 내용을 전부 삭제하고 싶다면 dict.clear()를 호출하면 된답니다.

예제2

  • 문제
a,b는 각각 1,2의 값을 가지고 있습니다. 튜플을 이용해서 a와 b의 값을 서로 바꿔보세요.

unpacking은 패킹된 변수에서 여러개의 값을 꺼내옵니다. 아래의 예를 참고하여 튜플을 이해하고 문제를 해결해 보세요
  • 코드
a = 1
b = 2

#코드를 작성해 보세요.
a, b = 
b,a


print("a : {}, b : {}".format(a, b))
  • tip
c = (3, 4)
d, e = c     # c의 값을 언패킹하여 d, e에 값을 저장
f = d, e     # 변수 d와 e를 f에 패킹

7-1. 튜플을 이용한 함수의 리턴값

  • 튜플 리스트 활용
for a in enumerate(list):
    print('{}번째 값: {}'.format(a[0], a[1]))

for a in enumerate(list):
    print('{}번째 값: {}'.format(*a))
  • 튜플 딕셔너리 활용
for a in dict.items():
    print('{}의 나이는:{}'.format(a[0], a[1]))

for a in dict.items():
    print('{}의 나이는:{}'.format(*a))
  • 튜플의 활용
    두 변수의 값을 바꿀 때 임시변수가 필요 없다.
    함수의 리턴 값으로 여러 값을 전달할 수 있다.

7-2. 튜플을 이용한 함수의 리턴값 실습 하기

예제1

  • 문제
products의 상품명과 값을 한 줄씩 출력하도록 코드의 4번째줄의 빈칸을 채워 보세요.
  • 코드
products = {"풀" : 800, "색종이": 1000}

for product_detail in products.items():
    print("{}의 가격: {}원".format( 
* product_detail
 ))
  • tip
    튜플로 리턴하기 위해 리스트나 딕셔너리를 이용할 수 있습니다. 딕셔너리의 items()를 이용하여 튜플을 리턴할 때에는 *를 사용할 수 있습니다. 아래의 예제를 살펴보고 문제를 해결해 보세요.
ages = {'Tod' : 35, 'Jane' : 23, 'Paul' : 62}

for a in ages.items():
    print('{}의 나이는:{}'.format(a[0], a[1]))

for a in ages.items():
    print('{}의 나이는:{}'.format(*a))    # 두 출력 결과가 같습니다.

profile
안녕하세요. 일로 인해 잠시 쉽니다 :)

0개의 댓글