코딩 노트

04-2 딕셔너리와 반복문 본문

Python

04-2 딕셔너리와 반복문

newbyeol 2021. 4. 26. 02:10

0. 시작하기 전에

리스트가 '인덱스를 기반으로 값을 저장하는 것'이라면 딕셔너리는 '키를 기반으로 값을 저장하는 것'이라고 할 수 있다.

자료형 의미 가리키는 위치 선언 형식
리스트 인덱스를 기반으로 값을 저장 인덱스 변수 = []
딕셔너리 키를 기반으로 값을 저장 변수 = {}

1. 딕셔너리 선언하기

딕셔너리는 중괄호{}로 선언하며, '키: 값 형태를 쉼표{,}로 연결해서 만든다. 키는 문자열, 숫자, 불 등으로 선언할 수 있다. 하지만 일반적으로는 문자열을 사용하는 경우가 많다.

변수 = {
키: 값,
키: 값,
...
키: 값
}

코드를 적용해보자면...

>>> dict_a = {
	"name": "어밴저스 엔드게임",
    "type": "히어로 무비"
    }

(인터랙티브 셸에서 딕셔너리를 만들 때는 위의 코드처럼 닫는 괄호가 들여쓰기 뒹에 붙게 작성할 수밖에 없다.

파일에 딕셔너리를 작성할 때는 닫는 괄호 앞에 들여쓰기를 넣지 않아도 된다.)

 

2. 딕셔너리의 요소에 접근하기

>>> dict_a = {
	"name": "어밴저스 엔드게임",
    "type": "히어로 무비"
    }
>>> dict_a
{'name': '어벤저스 엔드게임', 'type',: '히어로 무비}

다 출력하는 것 말고도 특정 키 값만 따로 출력할 수도 있다. 딕셔너리의 요소에 접근할 때는 리스트처럼 딕셔너리 뒤에 대괄호[]를 입력하고 내부에 인덱스처럼 키를 입력한다. 주의해아할 점은 딕셔너리는 선언할 때 중괄호{}를 사용하지만 요소에 접근할 때는 리스트처럼 대괄호[]를 입력하고 내부에 인덱스처럼 키를 입력한다는 것이다.

>>> dict_a["name"]
'어밴저스 엔드게임'
>>> dict_a["type"]
'히어로 무비'

 딕셔너리 내부의 값에 문자열, 숫자, 불 등의 다양한 자료를 넣을 수도 있다. 리스트와 딕셔너리도 하나의 자료이므로,

리스트와 딕셔너리를 값으로 넣을 수도 있다.

>>> dict_b = {
	"director": ["안소니 루소", "조 루소"],
	"cast": ["아이언맨", "타노스", "토르", "닥터스트레인지", "헐크"]
	}
>>> dict_b
{'director': ['안소니 루소', '조 루소'], 'cast': ['아이언맨', '타노스', '토르', '닥터스트레인지', '헐크']}
>>> dict_b["director"]
['안소니 루소', '조 루소']

요소에 접근하는 방법은 리스트와 거의 비슷하다.

구분 선언 형식 사용 예 틀린 예
리스트 list_a = [] list_a[1]  
딕셔너리 dict_a = {} dict_a["name"] dict_a{"name"}

 

· 딕셔너리의 요소에 접근하기

# 딕셔너리를 선언합니다.
dictionary = {
    "name": "7D 건조 망고",
    "type": "당절임"
    "ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
	"origin":"필리핀"
}

#출력합니다.
print("name:", dictionary["name"])
print("type:", dictionary["type"])
print("ingredient:", dictionary["ingredient"])
print("origin:", dictionary["origin"])
print()

#값을 변경합니다.
dictionary["name"]="8D 건조 망고"
print("name:", dictionary["name"])

위에 예제에서 보면 ingredient는 dictionary의 키이기도 하지만, 여러 개의 자료를 가지고 있는 리스트이기도

하므로 다음과같이 인덱스를 지정하여 리스트 안의 특정 값을 출력할 수도 있다.

>>> dictionary["ingredient"]
['망고', '설탕', '메타중아황산나트륨', '치자황색소']
>>> dictionary["ingredient"][1]
'설탕'

3. 딕셔너리에 값 추가하기/제거하기

딕셔너리에 값을 추가할 때는 키를 기반으로 값을 입력하면 된다.

딕셔너리[새로운 키] = 새로운 값

· 딕셔너리의 요소에 접근하기 예제에 새로운 자료를 추가하고자 한다면 다음과 같이 키를 정하고 값을 입력한다.

>>> dictionary["price"] = 5000
>>> dictionary
{'name': '8D 건조 망고', 'type': '당절임', 'ingredient': ['망고', '설탕', '메타중아황산나트륨', 치자황색소'], 'origin': '필리핀', 'price': 5000}

만약 다음과 같이 딕셔너리에 이미 존재하고 있는 키를 지정하고 값을 넣으면 기존의 값을 새로운 값으로 대치하기도

한다.

>>> dictionary["name"] = "8D 건조 파인애플"
>>> dictionary
{'name': '8D 건조 파인애플', 'type': '당절임', 'ingredient': ['망고', '설탕', '메타중아황산나트륨', 치자황색소'], 'origin': '필리핀', 'price': 5000}

딕셔너리의 요소 제거는 리스트 때처럼 del 키워드를 이용하여 특정 키를 지정하면 해당 요소가 제거 된다.

>>> del dictionary["ingredient"]
>>> dictionary
{'name': '8D 건조 파인애플', 'type': '당절임', 'origin': '필리핀', 'price': 5000}

 

· 아무것도 없는 딕셔너리에 요소 추가하기

#딕셔너리를 선언합니다.
dictionary = {}

#요소 추가 전에 내용을 출력해 봅니다.
print("요소 추가 이전:", dictionary)

#딕셔너리에 요소를 추가합니다.
dictionary["name"] = "새로운 이름"
dictionary["head"] = "새로운 정신"
dictionary["body"] = "새로운 몸"

#출력합니다.
print("요소 추가 이후:", dictionary)

이번에는 두 개의 요소를 가진 딕셔너리를 선언하고, 이 두 요소를 제거한 후 내용을 출력하는 예제를 작성해 보겠다.

 

· 두 요소를 가진 딕셔너리에 요소 제거하기

#딕셔너리를 선언합니다.
dictionary = {
    "name": "7D 건조 망고"
    "type": "당절임"
    }

#딕셔너리의 요소를 제거합니다.
del dictionary["name"]
del dictionary["type"]

#요소 제거 후에 내용을 출력해 봅니다.
print("요소 제거 이후:", dictionary)

 

4. 딕셔너리 내부에 키가 있는지 확인하기 

딕셔너리에 존재하지 않는 키에 접근하면 KeyError가 발생한다. 그래서 존재하는 키인지, 존재하지 않는 키인지

확인할 수 있는 방법이 필요하다.

 

· in 키워드

리스트 내부에 값이 있는지 없는지 확인 할때 사용했던 것 처럼 딕셔너리 내부에 키가 있는 지 없는 지 확인 할 때도

in 키워드를 사용한다. 사용자로부터 접근하고자 하는 키를 입력받은 후, 존재하는 경우에만 접근해서 값을 출력한다.

 

· 키가 존재하는지 확인하고 값에 접근하기

#딕셔너리를 선언합니다.
dictionary =  {
    "name": "7D 건조 망고",
    "type": "당절임",
    "ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
    "origin": "필리핀"
    }

#사용자로부터 입력을 받습니다.
key = input(">접근하고자 하는 키: ")

#출력합니다.
if key in dictionary:
    print(dictionary[key])
else:
    print("존재하지 않는 키에 접근하고 있습니다.")

· get() 함수 

존재하지 않는 키에 접근하는 상황에 대한 두 번째 대처 방법은 딕셔너리의 get()함수를 사용하는 것이다.

이전에 문자열이 내부적으로 많은 함수를 갖고 있는 것을 확인 했는데, 딕셔너리도 뒤에 .(마침표)를 찍고

자동 완성 기능으로 확인하면 다양한 기능이 있다는 것을 알 수 있다.

 

get() 함수는 딕셔나리의 키로 값을 추출하는 기능으로 딕셔너리[키]를 입력할 때와 같은 기능을 수행하지만,

존재하지 않는 키에 접근할 경우 KeyError를 발생시키지 않고 None을 출력한다.

 

· 키가 존재하지 않을 때 None을 출력하는지 확인하기

#딕셔너리를 선언합니다.
dictionary =  {
    "name": "7D 건조 망고",
    "type": "당절임",
    "ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
    "origin": "필리핀"
    }

#존재하지 않는 키에 접근해 봅니다.
value = dictionary.get("존재하지 않는 키")
print("값:",value)

#None 확인 방법
if value == None: #None과 같은지 확인만 하면 됩니다.
    print("존재하지 않는 키에 접근했었습니다")

5. for 반복문: 딕셔너리와 함께 사용하기

for 반복문과 딕셔너리를 조합해서 사용하면 다음과 같은 형태가 되는데, 여기서 주의할 점은 딕셔너리 내부에

있는 키가 변수에 들어간다는 것이다.

for 키 변수 in 딕셔너리:
	코드

· for 반복문과 딕셔너리

#딕셔너리를 선언합니다.
dictionary =  {
    "name": "7D 건조 망고",
    "type": "당절임",
    "ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
    "origin": "필리핀"
    }

#for 반복문을 사용합니다.
for key in dictionary:
	#출력합니다.
    print(key, ":", dictionary[key])