[Zero-Base DS]스터디노트_자료구조(03)

HAHAHAEUN·2024년 3월 23일

주요 학습내용

딕셔너리(Dictionary)

1) 딕셔너리 조회

2) 딕셔너리 추가/수정

3) 전체 키(key)와 값(value) 조회

4) 아이템(item) 삭제

5) 기타 추가 기능(in/not in, clear())

I. 딕셔너리(Dictionary)

  • 딕셔너리는 앞선 리스트와 튜플과는 다르게 키(key)값(value)를 이용해서 자료를 관리한다
  • '{}'를 이용하여 선언하고, ' , '를 이용하여 구분한다
  • key와 value는 숫자/문자(열)/논리형/컨테이너 자료형 모두 가능
    • key = immutable(변경 불가능)
    • value = mutable(변경 가능)
dic = {'s1': '홍길동', 
		's2': '박찬호', 
		's3': '이용규', 
        's4': '박승철', 
        's5': '김지은'}

1. 딕셔너리 조회(key 이용)

  • 딕셔너리는 키(key)를 이용해서 값(value)을 조회한다
students = {'s1': '홍길동',
            's2': '박찬호',
            's3': '이용규',
            's4': '박승철',
            's5': ['박세리', '박공주']}

print('students[\'s1\']: {}'.format(students['s1']))
print('students[\'s2\']: {}'.format(students['s2']))
print('students[\'s3\']: {}'.format(students['s3']))
print('students[\'s4\']: {}'.format(students['s4']))
print('students[\'s5\']: {}'.format(students['s5']))
print('students[\'s5\'[0]]: {}'.format(students['s5'][0]))  # value 값 중 0번째
print('students[\'s5\'[1]]: {}'.format(students['s5'][1]))  # value 값 중 1번째

출력 결과 :

  • 존재하지 않는 key 조회시(error 발생)
print('students[\'s6\']: {}'.format(students['s6']))

출력 결과 :

  • get(key)를 이용하는 경우, 존재하지 않는 키 조회해도 error X
print('students[\'s6\']: {}'.format(students.get('s6')))

출력 결과 :

2. 딕셔너리 추가/수정

  • '딕셔너리이름[키(key] = 값(value)'형태로 아이템 추가 가능
  • 이때, 추가하려는 키가 이미 있다면 기존 값이 변경되므로 확인 필요
myInfo['이름'] = '홍길동'
myInfo['전공'] = 'computer'
myInfo['메일'] = 'gildong@gmail.com'
print(myInfo)
print('='*50)
# 변경 / 추가하려는 정보가 이미 있다면 변경됨
myInfo['메일'] = 'gildong@naver.com'  # 기존 정보 변경 됨
myInfo['학년'] = 3  # 추가 됨
print(myInfo)

출력 결과 : (메일 주소가 기존 gmail에서 naver로 바뀐 것을 확인할 수 있다)

(예제)


import math
factorialDic = {}

for i in range(11):
    if i == 0:
        factorialDic[i] = 1
    else:
        # factorialDic[i] = math.factorial(i)  # 공식 사용할 시
        for j in range(1, i+1): 
            factorialDic[i] = factorialDic[i-1]*j


print(f'factorialDic: {factorialDic}')

출력 결과 :

3. 전체 키(key)와 값(value) 조회

  1. keys()와 values()를 이용하여 전체 키와 값 조회 가능
memInfo = {'이름': '홍길동',
           '메일': 'gildong@gmail.com',
           '학년': 3,
           '취미': ['농구', '게임']}
           
ks = memInfo.keys()
print(f'ks: {ks}')
print(f'ks type: {type(ks)}')

vs = memInfo.values()
print(f'vs: {vs}')
print(f'vs type: {type(vs)}')
print('-'*50)

출력 결과 : (전체 키 & 값 조회 가능)

  • 출력되는 형식을 보면 리스트와 비슷하게 [ ]로 출력되는 것을 볼 수 있으나, 실제 type은 dict_keys/values(완전한 리스트는 아님)
  • 리스트로 변환하고 싶은 경우, type을 list로 지정 필요
# list로 변환
ks = list(ks)
print(f'ks: {ks}')
print(f'ks type: {type(ks)}')

vs = list(vs)
print(f'vs: {vs}')
print(f'vs type: {type(vs)}')
print('-'*50)

출력 결과 : (type이 list로 변경된 것을 확인할 수 있다)

  1. items()를 이용하여 키와 값 조회 가능
    • item = 키 + 값
items = memInfo.items()
print('items: {}'.format(items))
print(f'items type : {type(items)}')
print('-'*50)

출력 결과 :

  • 리스트 안에 개개의 아이템이 튜플로 저장된 것 처럼 보이지만, 실제 type은 dict_items
  • 위와 같이 list형식으로 변경 원할 시, list로 type지정 해주면 변경 가능함
  1. for문 사용
    1) keys와 values 따로따로 출력
    2) keys와 values 모두 출력
# for문을 이용한 조회
# 1)
for key in ks:
    print(f'key: {key}')
for idx, key in enumerate(ks):
    print(f'idx, key: {idx}, {key}')

print('='*50)
# 2)
for key in memInfo.keys():
    print(f'{key}: {memInfo[key]}')

출력 결과 :

4. 아이템(item) 삭제(del, pop())

  • del과 pop()을 이용하여 item 삭제 가능
# 1) del
memInfo = {'이름': '홍길동',
            '메일': 'gildong@gmail.com',
            '학년': 3,
            '취미': ['농구', '게임']}
print(len(memInfo))
# len()이용하여 아이템 개수 확인 가능
# 현 예시, 이름/메일/학년/취미 총 4개

del memInfo['메일']
print(memInfo)
print(len(memInfo))
print('='*50)

# 2) pop
memInfo.pop('이름')
print(memInfo)
print(len(memInfo))

출력 결과 :

5. 기타 추가 기능

  • 리스트/튜플과 마찬가지로 in/not in을 이용하여 키 존재 유무 확인 가능

  • clear()를 이용하여 딕셔너리 안에 있는 모든 아이템 삭제 가능

    (예제)

    myInfo = {'이름': 'Hong Gil Dong',
              '나이': '30',
              '연락처': '010-1234-5678',
              '주민등록번호': '840315-1234567',
              '주소': '대한민국 서울'}
    print('myInfo: {}'.format(myInfo))
    deleteItem = ['연락처', '주민등록번호']
    
    for item in deleteItem:
        if item in myInfo:
            del myInfo[item]
    
    print('myInfo: {}'.format(myInfo))
    `

    출력 결과 : (연락처와, 주민등록번호가 삭제된 것을 확인할 수 있다)

    #  위 예제에서 clear()사용하여 딕셔너리 아이템 전체 삭제할 경우
    myInfo.clear()
    print(myInfo)

    출력 결과 : (아이템이 모두 사라진 것을 확인할 수 있다)

[자료 출처: 제로베이스 데이터 취업 스쿨]

profile
할 거면 제대로 하자

0개의 댓글