본문 바로가기
공부/코딩

⛷ [파이썬] 파이썬 기초 정리 (12) : 딕셔너리 _ 2

by blackb1rd 2022. 11. 12.
728x90
반응형
728x170

 

 

 

파이썬 기초 정리

 

5) 빈 딕셔너리로 시작하는 법 

빈 딕셔너리를 채우려면 먼저 빈 줄괄호로 딕셔너리를 정의하고, 키-값 쌍을 한 행에 하나씩 추가하면 됩니다. 다음은 fish_0 딕셔너리를 빈 상태로 시작해서 키-값 쌍을 채운 예제입니다.

 

예시6) 

fish_0 = {}

fish_0['color'] = 'orange'
fish_0['points'] = 15

print(fish_0)

 

결과 값

{'color': 'orange', 'points': 15}

 

위 예시 코드에서 먼저 빈 fisi_0 딕셔너리를 정의하고 난 뒤, 색상과 포인트를 추가 했습니다. 빈 딕셔너리는 일반적으로 사용자가 제공한 데이터를 딕셔너리에 저장하거나, 대량의 키-값쌍을 자동으로 생성하는 코드에서 사용 됩니다. 

 

 

 

 

 

 

6) 딕셔너리 값 수정하는 법

딕셔너리 안에 이미 존재하는 값을 수정하려면 딕셔너리 이름 다음에 대괄호로 감싼 키를 쓰고, 그 키와 연결할 새 값을 쓰면 됩니다. 예를 들어 물고기 잡는 게임을 할 때 물고기를 오렌지색에서 파란색으로 바꿀 때는 다음과 같은 코드를 사용합니다.

 

예시7) 

fish_0 = {'color': 'orange'}
print(f"The fish is {fish_0['color']}.")

fish_0['color'] = 'blue'
print(f"The fish is now {fish_0['color']}.")

 

결과 값

The fish is orange.
The fish is now blue.

 

우선 물고기의 색상만 담고 있는 fish_0 딕셔너리를 만든 후, 'color'의 키 값을 'blue'로 바꿨습니다. 결과 값을 보면 물고기의 색상이 오렌지색에서 파란색으로 바뀐 것을 확인할 수 있습니다. 

 

 

 

다음 예제는 물고기의 위치를 추적하는 예제입니다. 우선 현재 속도를 값으로 저장하고, 이 값을 통해 물고기가 오른쪽으로 얼마나 이동할지 판단할 수 있습니다. 

 

예시8) 

fish_0 = {'x_position': 0, 'y_position': 30, 'speed': 'slow'}
print(f"Original position: {fish_0['x_position']}")

# 물고기를 오른쪽으로 움직입니다. 
# 물고기의 현재 속도를 바탕으로 얼마나 많이 움직일지 결정합니다. 
if fish_0['speed'] == 'fast': #1
   x_increment = 3
elif fish_0['speed'] == 'slow':
   x_increment = 1
else:
   # This must be a medium fish. 
   x_increment = 2

# 새 위치는 이전 위치에 x_increment를 더한 값입니다. 
fish_0['x_position'] = fish_0['x_position'] + x_increment #2

print(f"New position: {fish_0['x_position']}")

 

결과 값

Original position: 0
New position: 1

 

먼저 물고기의 x위치와 y위치를 정하고 속도는 'slow' (천천히)로 정했습니다. x_position의 초기값인 Original position을 출력해서 물고기가 오른쪽으로 얼마나 움직였는지 확인할 수 있습니다.

#1에서는 if-elif-else 문을 사용해서 물고기가 오른쪽으로 얼마나 움직일지 결정하고, 이 값을 x_increment 변수에 할당했습니다. 물고기의 속도가 'slow'(천천히)이면 오른쪽으로 1칸, 속도가 'medium'(중간)이면 오른쪽으로 2칸, 속도가 'fast'(빠른)이면 오른쪽으로 3칸 움직입니다.

움직이는 거리를 계산한 결과를 #2에서 x_position에 더한 다음 딕셔너리의 x_position에 저장했습니다.

물고기는 느린속도로 움직였기 때문에 위치는 오른쪽으로 1칸 이동합니다.

 

만약 물고기의 속도를 빠르게 바꾸고 싶으면 다음 행을 추가하기만 하면 됩니다. 그러면 코드를 다음에 실행할 때는 if-elif-else블록에서 x_increment에 더 큰 값을 할당할 것입니다.

 

예시9) 

fish_0 = {'x_position': 0, 'y_position': 30, 'speed': 'fast'}

if fish_0['speed'] == 'fast': #1
   x_increment = 3
elif fish_0['speed'] == 'slow':
   x_increment = 1
else:
   # This must be a medium fish. 
   x_increment = 2

fish_0['x_position'] = fish_0['x_position'] + x_increment #2

print(f"A current position: {fish_0['x_position']}")

 

결과 값

A current position: 3

 

 

 

7) 딕셔너리 키값쌍 제거하는 법

딕셔너리에 저장한 정보가 더는 필요하지 않을 경우 del 문을 써서 키-값쌍을 완전히 제거할 수 있습니다. del 문에서 필요한 것은 딕셔너리와 제거할 키 이름입니다.

 

예를들어 fish_0 딕셔너리에서 'color'키와 그 값을 제거할 경우 아래 예시대로 따라하면 됩니다.

 

예시10)

fish_0 = {'color': 'blue', 'point': 5}
print(fish_0)

del fish_0['color'] #1
print(fish_0)

 

결과 값

{'color': 'blue', 'point': 5}
{'point': 5}

 

파이썬은 #1에서 fish_0 딕셔너리의 'color'키를 제거하고, 거기 연결된 값 역시 제거 합니다. 때문에 'color'키와 그 값인 blue는 딕셔너리에서 삭제 되었지만 나머지 딕셔너리에는 아무런 영향을 끼치지 않습니다.

 

* 여기서 제거한 키-값 쌍은 완전히 삭제되니 신중하게 삭제해야 합니다.

 

 

 

반응형

 

 

 

8) 비슷한 객체로 딕셔너리 만드는 법

딕셔너리에는 여러 객체에 공통적인 정보를 저장할 수도 있습니다. 예를 들어 사람들에게 그들이 가장 좋아하는 아이스크림의 맛을 묻는 투표를 한다고 해봅시다. 딕셔너리는 단순한 투표 결과를 저장할 때도 유용합니다.

 

예시11) 

favorite_icecream_flavor = {
    'jenny': 'chocolate',
    'john': 'cream', 
    'sophia': 'chocolate',
    'mike': 'lemon',#2
    }#3

 

위 예제에서는 딕셔너리 하나를 여러 행으로 나눠 작성했습니다. 각 키는 투표에 참여한 사람의 이름이며, 각 값은 그들이 선택한 아이스크림의 맛입니다.

 

딕셔너리를 정의할 때 여러 행이 필요하다면, 여는 중괄호 다음에 엔터키를 누르면 됩니다. 그리고 한 단계 (스페이스바 4번)로 들여쓰기를 한 다음 첫 번째 키-값 쌍을 쓰고 콤마를 입력하세요. 여기까지하게 되면 이후 엔터키를 누를 때 마다 자동으로 다음 키-값 쌍을 첫번째 키-값 쌍에 맞춰 들여쓰기 됩니다.

 

#2 마지막 키-값 쌍 다음에도 콤마를 써서, 언제든지 키-값 쌍을 추가할 수 있도록 하는 것이 파이썬에 능숙해지기 위해 좋은 습관입니다.

#3 딕셔너리 정의를 마쳤으면 닫는 중괄호를 다음 행에 추가하고 딕셔너리의 키-값 쌍들과 나란히 위치할 수 있도록 들여쓰기 하면 됩니다.

 

 

다음 예제와 같이 딕셔너리 이름 다음에 투표에 참여한 사람 이름을 쓰면 그들이 좋아하는 아이스크림 맛을 쉽게 알 수 있습니다.

 

예시12) 

favorite_icecream_flavor = {
    'jenny': 'chocolate',
    'john': 'cream', 
    'sophia': 'chocolate',
    'mike': 'lemon',
    }

flavor = favorite_icecream_flavor['jenny'].title() #1
print(f"Jenny's favorite ice cream flavor is {flavor}.")

 

결과 값

Jenny's favorite ice cream flavor is Chocolate.

 

제니(jenny)가 선택한 아이스크림 맛을 확인하는 부분은 favorite_icecream_flavor['jenny'] 입니다.

#1에서는 위의 문법을 써서 제니가 좋아하는 맛을 딕셔너리에서 가져온 다음 flavor 변수에 할당했습니다. 이렇게 새 변수를 만들면 print()호출 부분이 간단해지는 장점이 있습니다. 출력 결과는 제니가 좋아하는 아이스크림 맛입니다. (Jenny's favorite ice cream flavor is Chocolate.) 같은 문법을 써서 딕셔너리에 있는 다른 사람에 관한 정보도 가져올 수 있습니다.

 

 

 

9) get()을 사용해 딕셔너리 값에 접근하는 법

대괄호 안에 키를 쓰는 문법으로 딕셔너리에서 원하는 값을 가져오는 방식에는 잠재적인 문제가 있습니다. 바로 존재하지 않는 키에 접근함면 에러가 일어난다는 것입니다.

포인트 값을 만들지 않은 상태에서 포인트 값을 요청하면 아래와 같은 에러가 일어납니다.

 

예시13)

fish_0 = {'color': 'blue', 'speed': 'slow'}
print(fish_0['points'])

 

결과 값

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-13-c0e499d470ee> in <module>
      1 fish_0 = {'color': 'blue', 'speed': 'slow'}
----> 2 print(fish_0['points'])

KeyError: 'points'

 

 

- 해결책 

딕셔너리의 경우 요청한 키가 존재하지 않을 때 기본값을 대신 반환하는 get() 메서드를 사용해서 에러를 피할 수 있습니다.

get()메서드의 첫번째 매개변수는 키입니다. 두번째 매개변수는 옵션으로, 키가 존재하지 않을 대 반환할 값을 쓸 수 있습니다. 아래 예시를 확인해주세요.

 

예시14)

fish_0 = {'color': 'blue', 'speed': 'slow'}

point_value = fish_0.get('points', 'No point value assigned.')
print(point_value)

 

결과 값

No point value assigned.

 

'points' 키가 존재하면 그에 해당하는 값을 얻을 수 있습니다. 하지만 존재하지 않다면 기본값을 얻게 됩니다. 여기서는 point키가 존재하지 않지만, 다음과 같이 에러가 아니라 미리 입력한 메시지를 결과 값으로 받게 됩니다.

이런 점 때문에 존재하지 않는 키를 요청할 수도 있을 것 같다면, 대괄호 표기법 대신 get() 메서드를 사용하는 것을 추천합니다.

 

 

 

 

728x90
반응형
그리드형

댓글