[Python][자료구조] 딕셔너리 선언, 조회, 추가, 삭제

·2023년 3월 20일
0
post-thumbnail

✒️ 딕셔너리 선언

키(key)와 값(value)를 이용해서 자료를 관리한다.

'{ }'를 선언하고, '키 : 값'의 형태로 아이템을 정의한다.

  • key와 value에는 숫자, 문자, 논리형 뿐만 아니라 컨테이너 자료형도 올수 있다.
  • 단, key에 immutable 값은 올수 있지만 mutable 값은 올수 없다.
참고 : [Python] immutable, mutable 객체

bloodType = {'짱구': 'AB', '철수': 'A', '유리': 'B', '훈이': 'A', '맹구': 'O'}
detailInfo1 = {'이름': '짱구', '나이': 5, '좋아 하는 것': '초코비'}
detailInfo2 = {'이름': '철수', '나이': 5, '좋아 하는 것': '공부'}
detailInfo3 = {'이름': '맹구', '나이': 5, '좋아 하는 것': '돌'}
childrenInfo = {1: detailInfo1, 2: detailInfo2, 3: detailInfo3}
print(childrenInfo)
💡result

{1: {'이름': '짱구', '나이': 5, '좋아 하는 것': '초코비'}, 2: {'이름': '철수', '나이': 5, '좋아 하는 것': '공부'}, 3: {'이름': '맹구', '나이': 5, '좋아 하는 것': '돌'}}

✒️ 딕셔너리 조회

딕셔너리 키(key)를 이용해서 값(value)를 조회한다.

bloodType = {'b1': 'AB', 'b2': 'A', 'b3': 'B', 'b4': 'O'}
print(f'bloodType[\'b1\'] : {bloodType["b1"]}')
print(f'bloodType[\'b2\'] : {bloodType["b2"]}')
print(f'bloodType[\'b3\'] : {bloodType["b3"]}')
print(f'bloodType[\'b4\'] : {bloodType["b4"]}')
💡result

bloodType['b1'] : AB
bloodType['b2'] : A
bloodType['b3'] : B
bloodType['b4'] : O

존재하지 않는키를 이용한 조회 시 에러 발생

#에러 발생
print(f'bloodType[\'b4\'] : {bloodType["b5"]}')
 ❗print(f'bloodType[\'b4\'] : {bloodType["b5"]}') 
 KeyError: 'b5'

get(key)를 이용해서 값(value)를 조회할 수 있다 .

bloodType = {'b1': 'AB', 'b2': 'A', 'b3': 'B', 'b4': 'O'}
print(f'bloodType[\'b1\'] : {bloodType.get("b1")}')
print(f'bloodType[\'b2\'] : {bloodType.get("b2")}')
print(f'bloodType[\'b3\'] : {bloodType.get("b3")}')
print(f'bloodType[\'b4\'] : {bloodType.get("b4")}')
💡result

bloodType['b1'] : AB
bloodType['b2'] : A
bloodType['b3'] : B
bloodType['b4'] : O

❗get()은 존재하지 않는 key 값으로 value를 불러와도 에러가 발생하지 않는다.

# 에러 발생하지 않음 
print(f'bloodType[\'b4\'] : {bloodType.get("b5")}')
💡result
bloodType['b4'] : None

✒️ 딕셔너리 추가

' 딕셔너리이름[키(key)] = 값(value) ' 형태로 아이템을 추가한다.


myInfo = {}
myInfo['이름'] = 'YUN'
myInfo['전공'] = 'Computer'
myInfo['메일'] = 'YUN1@gmail.com'
myInfo['취미'] = ['독서', '유튜브', '벨로그']
print(f'MyInfo : {myInfo}')

myInfo['메일'] = 'YUN123@naver.com'
print(f'MyInfo : {myInfo}')
💡result

MyInfo : {'이름': 'YUN', '전공': 'Computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
MyInfo : {'이름': 'YUN', '전공': 'Computer', '메일': 'YUN123@naver.com', '취미': ['독서', '유튜브', '벨로그']}

✍️실습

0부터 10까지 각각의 정수에 대한 팩토리얼을 딕셔너리에추가해 보자.


factorials = {}
factorial = 1
for i in range(1, 11):
    factorial = factorial * i
    factorials[i] = factorial

print(factorials)
💡result

{1: 1, 2: 2, 3: 6, 4: 24, 5: 120, 6: 720, 7: 5040, 8: 40320, 9: 362880, 10: 3628800}

✒️ 딕셔너리 수정

'딕셔너리 이름[키(key)] = 값(value) ' 형태로 아이템을 수정한다.


myInfo = {}
myInfo['이름'] = 'YUN'
myInfo['전공'] = 'Computer'
myInfo['메일'] = 'YUN1@gmail.com'
myInfo['취미'] = ['독서', '유튜브', '벨로그']
print(f'MyInfo : {myInfo}')

myInfo['메일'] = 'YUN123@naver.com'
print(f'MyInfo : {myInfo}')
💡result

MyInfo : {'이름': 'YUN', '전공': 'Computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
MyInfo : {'이름': 'YUN', '전공': 'Computer', '메일': 'YUN123@naver.com', '취미': ['독서', '유튜브', '벨로그']}

✍️실습

하루에 몸무게(kg)와 신장(m)이 각각 -0.3kg, +0.001m씩 변한 다고 할 때, 30일 후의 몸무게와 신장의 값을 저장하고 BMI 값도 출력하는 프로그램

bodyInfo = {'이름': '짱구', '몸무게': 83, '신장': 1.8}
print(f'bodyInfo : {bodyInfo}')

for i in range(30):
    bodyInfo['몸무게'] = bodyInfo['몸무게'] - 0.3
    bodyInfo['신장'] = bodyInfo['신장'] + 0.001

bodyInfo['몸무게'] = round(bodyInfo['몸무게'], 2)
bodyInfo['신장'] = round(bodyInfo['신장'], 2)

myBMI = bodyInfo['몸무게'] / (bodyInfo['신장'] ** 2)
print('-' * 20 + '30일 후' + '-' * 20)
print(f'bodyInfo : {bodyInfo}')
print(f'myBMI : {round(myBMI, 2)}')

💡result

bodyInfo : {'이름': '짱구', '몸무게': 83, '신장': 1.8}
--------------------30일 후--------------------
bodyInfo : {'이름': '짱구', '몸무게': 74.0, '신장': 1.83}
myBMI : 22.1

✒️ keys()와 values()

전체 키(key)와 값(value)를 조회할 수 있다.


myInfo = {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
keys = myInfo.keys()
print(keys)
print(type(keys))
values = myInfo.values()
print(values)
print(type(values))
items = myInfo.items()
print(items)
print(type(items))

💡result

dict_keys(['이름', '전공', '메일', '취미'])
<class 'dict_keys'>
dict_values(['YUN', 'computer', 'YUN1@gmail.com', ['독서', '유튜브', '벨로그']])
<class 'dict_values'>
dict_items([('이름', 'YUN'), ('전공', 'computer'), ('메일', 'YUN1@gmail.com'), ('취미', ['독서', '유튜브', '벨로그'])])
<class 'dict_items'>

리스트로 변환하기

keys = list(keys)
values = list(values)
items = list(items)
print(keys)
print(type(keys))
print(values)
print(type(values))
print(items)
print(type(items))
💡result

['이름', '전공', '메일', '취미']
<class 'list'>
['YUN', 'computer', 'YUN1@gmail.com', ['독서', '유튜브', '벨로그']]
<class 'list'>
[('이름', 'YUN'), ('전공', 'computer'), ('메일', 'YUN1@gmail.com'), ('취미', ['독서', '유튜브', '벨로그'])]
<class 'list'>

for문을 이용한 조회

myInfo = {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
keys = myInfo.keys()
values = myInfo.values()
items = myInfo.items()

for key in keys:
    print(f'key : {key}')
for value in values:
    print(f'value : {value}')
for item in items:
    print(f'item : {item}')

💡result

key : 이름
key : 전공
key : 메일
key : 취미
value : YUN
value : computer
value : YUN1@gmail.com
value : ['독서', '유튜브', '벨로그']
item : ('이름', 'YUN')
item : ('전공', 'computer')
item : ('메일', 'YUN1@gmail.com')
item : ('취미', ['독서', '유튜브', '벨로그'])

✒️ 딕셔너리 삭제

📌del

del과 key를 이용한 삭제

myInfo = {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
print(f'myInfo : {myInfo}')

del myInfo['전공'] #삭제된 값 반환 안함 
print(f'myInfo : {myInfo}')
💡result
myInfo : {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
myInfo : {'이름': 'YUN', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}


📌pop()

pop()은 삭제된 값을 반환한다.

myInfo = {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
print(f'myInfo : {myInfo}')
deleteValue=myInfo.pop('메일')
print(f'delete value : {deleteValue}')
print(f'myInfo : {myInfo}')
💡result

myInfo : {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
delete value : YUN1@gmail.com
myInfo : {'이름': 'YUN', '전공': 'computer', '취미': ['독서', '유튜브', '벨로그']}

✒️ 딕셔너리 유용한 기능

📌 in과 not in

myInfo = {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
print('이름' in myInfo)
print('전공' in myInfo)
print('나이' in myInfo)
print('메일' in myInfo)

print('이름' not in myInfo)
print('전공' not in myInfo)
print('나이' not in myInfo)
print('메일' not in myInfo)
💡result

True
True
False
True
False
False
True
False

📌clear()

모든 아이템을 삭제한다.

myInfo = {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
print(f'myInfo : {myInfo}')
print(f'myInfo.clear() : {myInfo.clear()}')
💡result

myInfo : {'이름': 'YUN', '전공': 'computer', '메일': 'YUN1@gmail.com', '취미': ['독서', '유튜브', '벨로그']}
myInfo.clear() : None
profile
개발하고싶은사람

0개의 댓글