딕셔너리 내부에 key가 있는지

확인하는 방법

 

 

 

 

 

 

먼저

딕셔너리 내부에 있는 key 값을

꺼내올 때 사용하는 기본 방법은

 

 

 

print( 딕셔너리명 ["키명"]),

 

 

 

이때 꺼내고자 하는 키가 있는 경우

해당 키의 값을 반환해 주는데

 

 

 

꺼내고자 하는 키가 없는 경우

Error 메시지가 뜨는 것을 확인할 수 있다.

 

 

 

 

 


 

 

 

 

 

1. If 조건문에 적용하기

 

 

 

 

dictionary = {

"이름" : "타쿠대디"

"종족" : "천재 신인류"

}

 

if "나이" in dictionary:

print ( dictionary [ "나이" ] )

else:

print ("key 정보가 없습니다")

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

2. get ( ) 함수 활용

 

 

 

겟 함수를 사용하면

앞서 사용했던 방법과

동일한 결괏값을 돌려받지만

 

 

 

차이로는

 

 

 

원하는 키가 없는 경우

장문의 Error 가 뜨는 대신

'None'이라는 메시지가 반환되며,

 

 

 

별도로 디폴트 값을 미리 정해두어

None 대신 돌려받을 수 있다.

 

 

 

 

예제를 보자

 

 

 

 

 

 

 

 

 

먼저 기본 사용법을 비교해보자.

 

 

 

print ( a ["너구리"])

print ( a.get ( "너구리"))

 

 

 

출력 결과는 같기 때문에 둘 중

선호하는 것을 쓰면 된다.

 

 

예제의 3,4번째는 꺼내려는 키가

없는 경우인데, 3번째의 경우

None 이라는 메시지가 반환되었고

 

 

 

4번째의 경우, 혹 키가 없을 경우를

대비해 디폴트로 넣어둔 "정보 없음"

이 None 대신 출력하는 것을 볼 수 있다.

 

 

 

디폴트 사용법은

.get ( a ( "키 이름", "디폴트 값" ))

 

 

 

 

 


 

 

 

 

 

 

3. in 연산자를 활용한 if 문

 

 

 

예제 1)

 

 

 

 

 

 

 

 

 

 

 

예제 2)

 

 

 

 

 

 

딕셔너리 내부에 해당 키가 있는지

확인하는 위 코드는 실제로도 많이

활용되기 때문에 꼭 기억하자!

 

 

 

 


 

 

 

 

 

 

* 중요!

 

 

많이 사용하는 딕셔너리 형태 예제

 

 

 

 

 

 

1. 리스트안에 여러 정보들이

딕셔너리 배열의 형태로 담겨있다.

 

 

 

반복문을 이용해 정보를

가지고 오자.

 

 

 

 

 

 

 

 

 

대괄호와 중괄호 구분에 주의하자

 

 

 

 

 

 

 


 

 

 

 

 

2. 무작위로 반복되는 숫자가

몇 번씩 반복되고 있는지 세주는 프로그램

 

 

 

*정말 많이 사용되는 고정적인

카운터 코드이기 때문에

꼭 알고 있어야 한다.

 

 

 

이해될 때까지 보고 또 외워두자!

 

 

 

 

 

 

 

 

 

 

 

코드)

 

 

 

 

 

numbers = [1,5,6,7,8,9,6,1,2,4,3,5,8,1,1,7,1,3]

counter = { }

 

 

for number in numbers:

    if number in counter:

         counter[number] +=1

 

    else:

         counter[number] = 1

 

print(counter)

 

 

 

 

 

 

해석)

 

 

 

먼저

numbers라는 '리스트'가 있고

값이 무작위로 들어가 있다.

리스트는 대괄호를 쓴다.

 

 

 

다음

counter라는 '딕셔너리'가 있으며

현재 키와 값은 비어있다.

딕셔너리는 중괄호를 쓰며 내부 형태는

{ 키 : 값 }의 형태로 이루어져 있다.

 

 

 

numbers라는 리스트의 값 '하나'를

number라는 변수에 담았다.

우리는 반복문을 사용하기 때문에

numbers라는 리스트에 있는

모든 값을 처음부터 끝까지

'하나씩 반복'하여 number라는

변수에 넣어주게 된다.

 

 

 

이제 두 가지 조건을 걸어주는데

 

 

 

만약 number라는 변수에 담은

numbers의 숫자가 counter

안에도 있다면 1로 표시를 해주고

else:

counter[number] = 1

 

 

 

이것이 반복되어 발견된다면

반복되는 수만큼 1을 더해 준다.

counter[number] += 1

 

 

 

이와 같은 조건문은 else를

먼저 확인하고 짜야 이해가 더 쉽다.

 

 

 

 

 


 

 

 

 

 

3. 중요!!

flatten

 

 

 

딕셔너리 내부에 딕셔너리가,

그 안에 또한 리스트가 중첩되어

사용되는 경우가 많은데

 

 

 

그 모든 값들을 일렬로 가지고 오는 것을

flatten이라고 한다.

 

 

(flatten 함수에 대해선

다음에 다루도록 한다.)

 

 

 

복잡하고 헷갈릴 수 있으니

완벽히 이해될 때까지 연습해야 하며

마찬가지로 자주 사용되는 중요한 내용이니

꼭 알아두고 익히자.

 

 

 

 

 

 

- 사용해야 하는 것들 -

 

type 함수 / in 연산자 / 반복문 중복 사용

 

 

 

 

 

 

일단 각 값들에 접근하는

연습부터 해야 하는데

그것을 하려면 우선

 

 

 

각 값 들의 '데이터 타입'이

어떻게 구성되어 있는지

확실히 체크를 해두어야 한다.

 

 

 

먼저 딕셔너리의

전체 구성을 살펴보자

 

 

 

 

 

 

복잡복잡

 

 

 

 

 

주목할 것은 '키'가 아니라

'값'들의 '데이터 타입'.

 

 

items 키의 값이 '딕셔너리 타입'이고

skill의 값은 '리스트 타입'인 것을

체크하자!

 

 

 

 

 


 

 

 

 

1. 우선 items 키의 값을 들고 와보자!

 

 

 

먼저 전체 딕셔너리의 내용을

key라는 변수에 담았다.

 

 

 

 

 

 

 

 

 

다음으로

 

 

 

전체 딕셔너리의 값들 중

데이터 타입(type)이 딕셔너리(dict)인 것을

골라 선택해 주어야 하는데

 

 

 

전체 딕셔너리의 값들만을 가지고 오는 키워드

character[key]를 사용해, 이를 type 함수로 묶어주고

그중에 데이터 타입이 dict인 것만 사용하겠다고

조건을 걸어준다.

 

 

 

그렇게 고른,

 

 

 

전체 값들 중 '데이터 타입'이

'딕셔너리'인 items의 값을

k라는 변수에 담아

 

 

 

이를 활용하여 출력,

(k, character [key][k])

 

 

 

k는 items라는 값 내부의

딕셔너리에 있는 '키'를 가리키고,

character[key][k]는 해당 키의

값을 나타낸다.

 

 

 

 


 

 

 

 

2. 동일한 방법으로 이번엔

값으로 list 데이터 타입을

가지고 있는 skill을 불러와 보자!

 

 

 

 

 

 

 

 

 

먼저 type 함수를 사용해

데이터 타입이 '리스트'인 값을

지목,

 

 

 

리스트의 요소를 skills라는

변수에 담았고

 

 

 

이를 활용하여 출력!

(key, skills)

 

 

 

key는 전체 딕셔너리 내 '키' 중

값이 list인 녀석만 고르게 되어있고

skills는 그 해당 키의 값을 가리키며

요소가 3개 있기 때문에 3회 반복하여

이를 출력해 준다.

 

 

 


 

 

 

3. 마지막으로 남은 키와 값을

출력해 주자.

 

 

 

 

 

 

 

 

 

chartacter라는 딕셔너리에 있는

총 4개의 키 중 2개는 이미 처리를

해 주었으니 남은 두 가지는

그냥 처리해 주면 된다.

 

 

 

복잡하지만 하나하나 따져보면

할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts