빅데이터 분석가 양성과정/Python

Ch04-2 반복문 / 딕셔너리와 반복문

분석가 황규진 2024. 7. 4. 15:39

리스트(list)는 '각 요소를 인덱스 기반으로 순서가 있게 저장하는 데이터 형태'다.

딕셔너리(dictonary)는 '키(key)를 기반으로 값(value) 저장하는 데이터 형태'다.

{
  "key_A':10,   #문자열을 Key로 사용
  "Key_B':20,
  1:40,#숫자를 Key로 사용
False:50#부울 값을 키로 사용
}

딕셔너리 선언하기

딕셔너리는 중괄호({})로 선언하며, key:value 형태로 한 요소가 생성되며 쉼표(,)로 key:valeu 쌍을 구분한다. 그리고 빈(empty) 리스트 형 데이터를 선언했던 것과 유사하게 빈(emtpy) 딕셔너리 형 데이터를 선언할 수 있다.

empty_list = []
empty_dic = {}
a_dic = {
    'name':'이재영',
    'address': '경상북도 안동시',
    'age': 23
}
  • 딕셔너리 요소(key:value)에 접근하기

키(key), 'name'에 해당하는 값(value)에 접근하려고 한다. 리스트(list)에서는 리스트 이름 뒤에 여는 대괄호([)와 닫는 대괄호(])를 쓰고 그 사이에 인덱스 숫자를 써서 특정 요소에 접근했었다. 딕셔너리에서 특정 요소에 접근하기 위해서는 리스트와 마찬가지로 딕셔너리 이름 뒤에 여는 대괄호([)와 닫는 대괄호(])를 쓰고 그 사이에 인덱스가 아니라 키(key)를 써서 해당 요소에 접근한다.

리스트 형 테이터가 각 요소로 다양한 데이터 형을 가질 수 있듯이 딕셔너리에서 값(key:value)도 다양한 형의 데이터를 가질 수 있다.

persion = {
    'name':'이재영',
    'address': '경상북도 안동시',
    'age': 23,
    'car': ['붕붕이', '쌩쌩이']
}
cars = persion['car']
print( cars )
print( cars[0] )
print( cars[1] )

['붕붕이', '쌩쌩이'] 붕붕이 쌩쌩이

my_dic에서는 boy를 어떻게 설명하는지 찾아 보겠다.

my_dic = {
    'boy': ['소년', '남자 아이', '(어린)아들'],
    'girl': ['소녀', '여자 아이', '딸'],
    'computer': {
        'cpu': '중앙처리장치',
        'memory':'기억장치'
    }
}

print( my_dic['boy'] )

['소년', '남자 아이', '(어린)아들']

mean = my_dic['boy']
print( mean[0] )
print( mean[1] )
print( mean[2] )

print('--- 구분선 ---')

for element in mean:
  print(element)

print('--- 구분선 ---')

for explanation in my_dic['boy']:
  print(explanation)

소년 남자 아이 (어린)아들 --- 구분선 --- 소년 남자 아이 (어린)아들 --- 구분선 --- 소년 남자 아이 (어린)아들

'computer'라는 단어에 대해서도 설명(value)을 달았는데, 설명이 사전(dictonary)이다. 사전 안에 사전을 넣었다.

mean_of_computer = my_dic['computer']
print(mean_of_computer)

{'cpu': '중앙처리장치', 'memory': '기억장치'}

print( mean_of_computer['cpu'] )
print( mean_of_computer['memory'] )

중앙처리장치 기억장치

print( my_dic['computer']['cpu'] )
print( my_dic['computer']['memory'] )

중앙처리장치 기억장치

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

딕셔너리에 값(value)을 추가할 때는 키(key)와 함께 저장해야 한다.

딕셔너리_이름[새로운_키]= 새로운_값
my_dic = {
    'boy': ['소년', '남자 아이', '(어린)아들'],
    'girl': ['소녀', '여자 아이', '딸'],
    'computer': {
        'cpu': '중앙처리장치',
        'memory':'기억장치'
    }
}

my_dic['AI'] = 'artificial intelligence'

print(my_dic)

{'boy': ['소년', '남자 아이', '(어린)아들'], 'girl': ['소녀', '여자 아이', '딸'], 'computer': {'cpu': '중앙처리장치', 'memory': '기억장치'}, 'AI': 'artificial intelligence'}

my_dic에 새로운 요소('AI':'artificial intelligence')가 추가된 것을 확인 했다

my_dic = {
    'boy': ['소년', '남자 아이', '(어린)아들'],
    'girl': ['소녀', '여자 아이', '딸'],
    'computer': {
        'cpu': '중앙처리장치',
        'memory':'기억장치'
    },
    'AI':'artificial intelligence'
}

my_dic['boy'].append('(특정한 일을 하는)남자[소년]')
print(my_dic['boy'])

['소년', '남자 아이', '(어린)아들', '(특정한 일을 하는)남자[소년]']

딕셔너리에서 특정 요소(key:value)를 삭제해보겠다.

my_dic = {
    'boy': ['소년', '남자 아이', '(어린)아들'],
    'girl': ['소녀', '여자 아이', '딸'],
    'computer': {
        'cpu': '중앙처리장치',
        'memory':'기억장치'
    },
    'AI':'artificial intelligence'
}

print( my_dic )                     # before
del my_dic['computer']['memory']
print( my_dic )                     # after

{'boy': ['소년', '남자 아이', '(어린)아들'], 'girl': ['소녀', '여자 아이', '딸'], 'computer': {'cpu': '중앙처리장치', 'memory': '기억장치'}, 'AI': 'artificial intelligence'} {'boy': ['소년', '남자 아이', '(어린)아들'], 'girl': ['소녀', '여자 아이', '딸'], 'computer': {'cpu': '중앙처리장치'}, 'AI': 'artificial intelligence'}

  • 딕셔너리 내부에 키(key)가 있는지 확인하기

딕셔너리에 없는 키(key)로 접근하면 에러가 난다. 그래서 해당 딕셔너리 형 데이터에 특정 키(key)가 존재하는지 확인 할 수 있는 기능이 있다.

in 키워드

리스트 형 테이터 내부에 특정 요소(값)이 있는지 확인하기 위해 in 키워드를 사용했었다. 딕녀서리 형 데이터 내부에 특정 키로 접근이 가능한지를 확인하기 위해 in 키워드를 사용할 수 있다.

dic = {
    'name':'김성필',
    'age': 25,
    'address':'경기도 화성시 동탄'
}
key = 'income'

if key in dic:
  print(dic[key])
else:
  print('존재하지 않은 key에 접근하고 있습니다.')

존재하지 않은 key에 접근하고 있습니다.

get() 함수

위 코드 셀에서 None이라는 키워드가 보이는데 None은 '없다'라는 의미를 갖는다. get()에 전달한 key에 대한 값이 있다면 get()는 전달 받은 key에 대한 값(value)를 반환한다.

dic = {
    'name':'김성필',
    'age': 25,
    'address':'경기도 화성시 동탄'
}
key = 'name'

value_for_key = dic.get(key)

if value_for_key == None:
  print('존재하지 않은 key에 접근하고 있습니다.')
else:
  print(value_for_key)

김성필

get()함수는 존재 하지 않는 키(key)로 접근했을 때 KeyError를 발생시키지 않고 None값을 반환한다.

◃참고▹

a **if** condition **else** b

위 코드는 다음과 같이 동작한다. 먼저 if문이 실행되어 condition을 따진다. condition이 참(True)면 a를 선택하고 그렇지 않으면(조건이 거짓이면) b가 선택된다.

a = 1
b = 2

x = a if a > b else b
print(x)

a = 2
b = 1

x = a if a > b else b
print(x)

2 2

dic = {
    'name':'이재영',
    'age': 25,
    'address':'경상북도 안동시'
}

key = 'name'

value = dic.get(key)

print(value if value != None else "존재하지 않는 key에 접근하고 있습니다.")

이재영

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

딕셔너리의 각 요소에 어떤 처리를 하기 위해 딕셔너리와 for문을 조합하여 활용하는 방법을 알아보겠다.

for somethingin dictonary_type_data:
#code

위 코드에서 dictonary_type_data는 딕셔너리 형 데이터를 의미한다. `something'은 어떤 값이 들어갈까? 다시 말해, key가 할당 될까? value가 할당될까?

lst = [1, 'a', 2, 'b']

for elementin lst:
#code

위 코드에서 element에는 lst의 요소(값)이 할당될 것이다. 그렇다면 something에는 키(key)가? 아니면 값(value)가? 아니면 key:value 형태의 데이터가 들어갈까?

dictonary_type_data = {
    'name':'이재영',
    'age': 25,
    'address':'경상북도 안동시'
}

for something in dictonary_type_data:
  print(something)

name age address

my_info = {
    'name':'이재영',
    'age': 25,
    'address':'경상북도 안동시'
}

for key in my_info:
  print(key, ":", my_info[key])

name : 이재영 age : 25 address : 경상북도 안동시