이번 장에서는 6장 Dictionaries에 대해서 알아보도록 하자. list, tuple에 이어서 새로운 type이 나왔다. 앞의 두 개는 친숙할지 몰라도 이 녀석은 생소한 type일 것이다. 하지만 그렇게 어려운 녀석은 아니기 때문에 천천히 하나씩 이해하면서 알아보도록 하자~

 

  • A Simple Dictionary

 제목이 저번 장과 똑같이 시작하는 것 같다...그 말은 즉슨 저번 장과 비슷하게 별로 어렵지 않다는 얘기이다^^ 이번 장은 이때까지 했던 장과는 다르게 새로운 type을 공부하기 때문에 더 재밌을 것 같다는 생각도 든다. dictionary란 사전이라고도 하는데 key와 value 두 가지 값을 가지며 각각에 대응되는 값을 가진다. 예를 들어 key가 '1'이고 value가 '우승'이면 1번을 호출하게 되면 '우승'이 출력된다. 아래 예제를 보고 dctionary type 사용법을 익혀보자.

 

alien_0 = {'color':'green', 'points':5}		# dic type alien_0 생성
print(alien_0['color'])				# 변수[key] = key에 해당하는 value 출력
print(alien_0['points'])

결과
green
5

 

 예제를 보면 항상 key와 value를 따음표(:)를 통해 연결되게 선언하며 중괄호{}를 사용하고 있다. 앞선 장에서 list는 대괄호[], tuple은 소괄호(), dic은 중괄호{}라는 것을 알 수 있다. 이 점을 꼭 기억하고 햇갈리지 않게 주의하자!!!(빨간색으로 표시해뒀다ㅎㅎ)

 특이하게 dic type은 index라는 값이 따로 없고 호출할 때 꼭 key를 호출하여 사용한다. 그리고  key의 value 값은 숫자나, 문자열, 리스트, 혹은 다른 dic type까지도 사용할 수 있다. 다른 type을 value로 가지는 예제에 대해서는 뒤에 나오므로 이 정도만 알고 넘어가도록 하자.

 

  • Adding

 다음은 dic의 adding에 대해서 알아보도록 하자. 앞의 배웠던 type과 크게 다르지 않지만 dic은 key-value 한 쌍을 이뤄야 하기 때문에 adding에서도 key-value 한 쌍을 이뤄서 입력해야 한다. 책에 나온 예제의 결과를 보고 나는 오타인 줄 알았지만 파이썬 3.7 이전에는 dic type에 새로운 값을 추가해도 규칙이 없이 값이 추가됬지만 3.7 이상부터는 입력된 순서대로 값이 저장된다고 젹혀있다. 이 점을 유의하고 실행 결과가 달라도 이해해주기를 바란다.(나는 3.7 이상이다.) 아래 예제를 살펴보고 추가하는 방법에 대해 알아보자.

 

alien_0 = {'color': 'green', 'points': 5} 
print(alien_0)
u alien_0['x_position'] = 0			# key = x_position, value = 0 추가
alien_0['y_position'] = 25 			# key = y_position, value = 25 추가
print(alien_0)

결과
{1: 'green', 'points': 5, 'x_position': 0, 'y_position': 25}

 

  • Modify

 Adding 다음은 Modify 즉 수정이다. 다들 예상했듯이 key-value는 한 쌍으로 존재한다고 계속 언급하고 있다. 그러므로 value를 수정하기 위해서는??? 당연히 key를 호출해야 한다. key를 호출하여 value를 수정할 수 있으며 이러한 방법은 직적 하는 방법도 있고 method를 사용하는 방법도 있다. 아래 예제를 살펴보고 수정하는 방법에 대해 알아보자.

 

alien_0 = {'color':'green'}
alien_0['color'] = 'yellow'			# alien_0의 key:'color'의 value = 'yellow' 변경
aliel_0.update(color = 'red')			# alien_0의 key:'color'의 value = 'red' 변경
print(aliel_0)

결과
red

 

  • Removing

 다음은 Removing이다. 삭제도 그렇게 어렵지 않고 내가 삭제하고 싶은 key를 찾아서 삭제하는 방법이다. 삭제할 때는 del을 사용하며 해당 key를 삭제하면 그에 맞는 key-value가 함께 삭제된다. 아래 예제를 살펴보고 삭제하는 방법에 대해 알아보자.

 

alien_0 = {'color': 'green', 'points': 5} 
del alien_0['points'] 				# key = 'points' 삭제
print(alien_0)

결과
{'color':'green'}

 

 그 다음을 살펴보면 dic type에 관련된  method가 소개되고 있다. 책에서는 get() method 한 개만 소개되고 있지만 이 외에도 clear(), items(), keys(), values() 등이 더 존재한다. 아래 예제를 살펴보고 각각의 method를 사용하는 방법에 대해 알아보자.

 

alien_0 = {'color':'green', 'speed':'slow'}
1. print(alien_0.get('points'))				# get(a, k) : key에서 'a'를 찾고 없으면 k 반환(기본값 : None)
2. print(alien_0.values())				# values() : 모든 value 반환
3. print(alien_0.keys())				# keys() : 모든 key 반환
4. print(alien_0.items())				# items() : 모든 value, key 반환
alien_0.clear()						# dic type variable 초기화
5. print(alien_0)					

결과
1. None
2. dict_values(['green', 'slow'])
3. dict_keys(['color', 'speed'])
4. dict_items([('color', 'green'), ('speed', 'slow')])
5. {}

 

 

  • Looping Through a Dictionary

 이번 장은 dic type을 조금 더 활용할 수 있는 loop문을 이용한 사용법이다. loop문을 통해 dic의 모든 요소를 반환하거나 사용할 수 있게 된다. 위에 나와 있는 items(), values(), keys() method들을 사용해서 loop문에서 활용할 수 있으며 상황에 따라 골라쓰면 될 것 같다. 그러면 간단하게 아래 예제를 보고 dic의 모든 요소를 출력하는 방법에 대해 알아보자.

 

favorite_languages = {'jen': 'python',
                      'sarah': 'c',
                      'edward': 'ruby',
                      'phil': 'python'}
for name, language in favorite_languages.items():		# items()를 이용해 모든 요소 출력
    print(f"{name.title()}'s favorite language is {language.title()}.")

출력
Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Ruby.
Phil's favorite language is Python.

 

 key와 value 요소를 각각 모두 출력하는 방법도 위와 같기 때문에 생략하기로 하겠다.

 

  • Nesting

 다음은 앞서 얘기했던 dic type과 다른 type과의 결합하는 방법에 대해 알아보자. 앞선 장에서 우리는 list를 배운 적이 있다. 하지만 요소로써 string, int, float들만 활용을 해보았으나 요소에 dic type을 넣을 수도 있는 사실이 책에 예시로 나와 있다.(반대로도 가능하다. 단 value만!!!) 아래 예제를 보고 list 안에 dic을 넣는 방법을 알아보자.

 

alien_0 = {'color': 'green', 'points': 5} 
alien_1 = {'color': 'yellow', 'points': 10} 
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]		# dic type 요소를 갖는 list 생성
for alien in aliens:    
	print(alien.keys())			# 요소가 dic type이면 그에 맞는 method도 사용 가능

결과
dict_keys(['color', 'points'])
dict_keys(['color', 'points'])
dict_keys(['color', 'points'])

 

 다음은 반대로 dic type 안에 list를 갖는 경우이다. 이 경우에는 key는 한 개의 값만 가질 수 있으며 한 개의 key에 여러 개의 value를 list type으로 지정할 수 있다. 아래 예제를 살펴보고 value를 list로 가지는 방법에 대해 알아보자.

 

pizza = {'crust':'thick',
         'toppings':['mushrooms', 'extra cheese']}
print(pizza['toppings'])			# key = 'toppings'의 모든 value 출력
print(len(pizza['toppings']))			# key = 'toppings'의 value 개수 출력
print('mushrooms' in pizza['toppings'])		# key = 'toppings'의 value 탐색

출력
['mushrooms', 'extra cheese']
2
True

 

 마지막으로 dic 안에 dic을 쓰는 방법이 있다. 이러한 경우로 key는 한 개의 값밖에 가지지 못하기 때문에 value에 dic type을 지정해서 쓰는 방법이다. 아래 예제가 햇갈릴 수 있지만 천천히 살펴보면 매우 간단하기 때문에 주석을 참고하여 사용 방법을 익혀보도록 하자.

 

users = {'aeinstein': {'first': 'albert',
                       'last': 'einstein',
                       'location': 'princeton'},
         'mcurie': {'first': 'marie',
                    'last': 'curie',
                    'location': 'paris'}
         }
for username, user_info in users.items():         	 	 # items()를 활용해 key와 value 나눔
    print(f"\nUsername: {username}")             	 	 
    full_name = f"{user_info['first']} {user_info['last']}"	# value가 dic type이므로 key 호출
    location = user_info['location']
    print(f"\tFull name: {full_name.title()}")
    print(f"\tLocation: {location.title()}")

결과
Username: aeinstein
	Full name: Albert Einstein
	Location: Princeton

Username: mcurie
	Full name: Marie Curie
	Location: Paris

 

 자 이렇게 dictionary type에 대해 간단하게 공부해봤다. 처음보는 type이어서 생소할 수 있지만 쓰다보면 꽤나 유용한 type이기 때문에 잘 공부해서 써먹어보자! 다음 장에서는 input() 함수와 또 다른 loop문인 while에 대해서 소개되고 있다. 그러면 다음 장에서 입력, 출력 모두 써먹을 수 있게 어서 배워보자~^^

'Python > No Starch Press_Python' 카테고리의 다른 글

Chapter8. Functions  (0) 2020.04.28
Chapter7. USER INPUT AND WHILE LOOPS  (0) 2020.04.20
Chapter5. IF STATEMENTS  (0) 2020.04.10
chapter4. working with lists  (0) 2020.04.10
Chapter3. Introducing Lists  (0) 2020.03.23
블로그 이미지

Mr.HB

프로그래밍 이야기

,