제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.25]
[강의 요약]
[Part 03. 자료구조&알고리즘 with Python_ Ch 01. 자료구조] 강의 수강
32_딕셔너리부터 34_딕셔너리 추가까지 강의 수강하였음
🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰ ] 40/100일 (40%)
토요일에 무려 응시료 8만원....인 자격증 시험이 있어서 최소한의 강의만 수강했음 ㅠ
[32_딕셔너리]
▶ 딕셔너리란?
키(key)와 값(value)의 쌍으로 데이터를 저장하는 비순차적 자료구조
리스트와 튜플과 달리 인덱스가 아닌 key로 접근함
# 기본 구조
dictName = {'key1': value1, 'key2': value2, ...}
key는 변경 불가능한(immutable) 값만 사용 가능하고
value에는 숫자, 문자열, 리스트, 튜플, 딕셔너리 등 다양한 타입 사용 가능함
▶ 코드 : 학생 명단 딕셔너리
students = {'s1':'홍길동', 's2':'박찬호', 's3':'이용규', 's4':'박승철', 's5':'김지은'}
print('students: {}'.format(students))
print('students type: {}'.format(type(students)))
[출력 결과]
students: {'s1': '홍길동', 's2': '박찬호', 's3': '이용규', 's4': '박승철', 's5': '김지은'}
students type: <class 'dict'>
▶ 코드 : 다양한 타입이 들어간 딕셔너리
memInfo = {
'이름': '홍길동',
'메일': 'gildong@gmail.com',
'학년': 3,
'취미': ['농구', '게임']
}
print('memInfo: {}'.format(memInfo))
print('memInfo type: {}'.format(type(memInfo)))
[출력 결과]
memInfo: {'이름': '홍길동', '메일': 'gildong@gmail.com', '학년': 3, '취미': ['농구', '게임']}
memInfo type: <class 'dict'>
▶ 코드 : 중첩 딕셔너리
student1 = {'이름': '홍길동', '메일': 'gildong@gmail.com', '학년': 3}
student2 = {'이름': '박찬호', '메일': 'chanho@gmail.com', '학년': 2}
student3 = {'이름': '이용규', '메일': 'yonggyu@gmail.com', '학년': 1}
studentInfo = {
1: student1,
2: student2,
3: student3
}
print('studentInfo: {}'.format(studentInfo))
print('studentInfo type: {}'.format(type(studentInfo)))
[출력 결과]
studentInfo: {
1: {'이름': '홍길동', '메일': 'gildong@gmail.com', '학년': 3},
2: {'이름': '박찬호', '메일': 'chanho@gmail.com', '학년': 2},
3: {'이름': '이용규', '메일': 'yonggyu@gmail.com', '학년': 1}
}
studentInfo type: <class 'dict'>
▶ 실습 코드 : 나의 정보를 딕셔너리로 표현
myInfo = {
'이름': '박경진',
'전공': 'computer',
'메일': 'jin@naver.com',
'학년': 3,
'주소': '대한민국 서울',
'취미': ['요리', '여행']
}
print('myInfo: {}'.format(myInfo))
[출력 결과]
myInfo: {
'이름': '박경진',
'전공': 'computer',
'메일': 'jin@naver.com',
'학년': 3,
'주소': '대한민국 서울',
'취미': ['요리', '여행']
}
[33_딕셔너리 조회]
▶ 코드 : 기본 딕셔너리 조회
students = {
's1': '홍길동', 's2': '박찬호', 's3': '이용규',
's4': '박승철', 's5': '김지은'
}
print('students[\'s1\']:{}'.format(students['s1']))
print('students[\'s5\']:{}'.format(students['s5']))
[출력 결과]
students['s1']:홍길동
students['s5']:김지은
▶ 코드 : 리스트 값을 포함한 딕셔너리
memInfo = {'이름': '홍길동', '취미': ['농구', '게임', '여행']}
print(memInfo['이름'])
print(memInfo['취미'])
for h in memInfo['취미']:
print(h)
for i, h in enumerate(memInfo['취미']):
print('index:{} --> {}'.format(i, h))
[출력 결과]
홍길동
['농구', '게임', '여행']
농구
게임
여행
index:0 --> 농구
index:1 --> 게임
index:2 --> 여행
▶ 코드 : 예외 발생 예시_존재하지 않는 key
students = {'s1':'홍길동', 's2':'박찬호'}
print(students['s6']) # 오류 발생
[출력 결과]
KeyError: 's6'
▶ 코드 : get() 사용_안전한 조회 방식
students = {'s1':'홍길동', 's2':'박찬호'}
print(students.get('s2')) # → 박찬호
print(students.get('s6')) # → None (오류 아님)
[출력 결과]
박찬호
None
▶ 실습 코드 : 나의 정보 조회 ([], get() 둘 다 사용)
myInfo = {
'이름': '박경진',
'전공': 'computer',
'메일': 'jin@naver.com',
'학년': 3,
'주소': '대한민국 서울',
'취미': ['요리', '여행']
}
# [] 방식
print('이름:', myInfo['이름'])
print('전공:', myInfo['전공'])
print('메일:', myInfo['메일'])
# get() 방식
print('이름:', myInfo.get('이름'))
print('주소:', myInfo.get('주소'))
print('취미:', myInfo.get('취미'))
[출력 결과]
이름: 박경진
전공: computer
메일: jin@naver.com
이름: 박경진
주소: 대한민국 서울
취미: ['요리', '여행']
[34_딕셔너리 추가]
▶ 코드 : 기본 딕셔너리 추가 및 수정
myInfo = {}
myInfo['이름'] = '박경진'
myInfo['전공'] = 'computer'
myInfo['메일'] = 'jin@naver.com'
myInfo['학년'] = 3
myInfo['주소'] = '대한민국 서울'
myInfo['취미'] = ['요리', '여행']
print(f'myInfo : {myInfo}')
[출력 결과]
myInfo : {'이름': '박경진', '전공': 'computer', '메일': 'jin@naver.com', '학년': 3, '주소': '대한민국 서울', '취미': ['요리', '여행']}
▶ 위 코드 수정 예시
myInfo['메일'] = 'gyeongjin@naver.com'
print(f'myInfo : {myInfo}')
[출력 결과]
myInfo : {'이름': '박경진', '전공': 'computer', '메일': 'gyeongjin@naver.com', '학년': 3, '주소': '대한민국 서울', '취미': ['요리', '여행']}
▶ 실습 코드 : 사용자 입력으로 딕셔너리 만들기
studentInfo = {}
studentInfo['name'] = input('이름 입력: ')
studentInfo['grade'] = input('학년 입력: ')
studentInfo['mail'] = input('메일 입력: ')
studentInfo['addr'] = input('주소 입력: ')
print(f'studentInfo : {studentInfo}')
[입력]
이름 입력: 김철수
학년 입력: 2
메일 입력: chulsoo@gmail.com
주소 입력: 서울 강남구
[출력 결과]
studentInfo : {'name': '김철수', 'grade': '2', 'mail': 'chulsoo@gmail.com', 'addr': '서울 강남구'}
▶ 실습 코드 : 팩토리얼 딕셔너리 만들기
factorialDic = {}
for i in range(11):
if i == 0:
factorialDic[i] = 1
else:
for j in range(1, (i+1)):
factorialDic[i] = factorialDic[i-1] * j
print(f'factorialDic : {factorialDic}')
[출력 결과]
factorialDic : {
0: 1,
1: 1,
2: 2,
3: 6,
4: 24,
...
10: 3628800
}
[나의 생각 정리]
오늘은 시간 관계상 코드가 왜 이렇게 작성되었을까? 고민하지 않고 정리만 했다.
딕셔너리도 많이 쓰이니까 클론 코딩하면서 복습하는 시간을 주말에 가지려 한다.
+ 백준 관련 문제 풀면서 손에 익히기
[적용점]
데이터 분석할 때와 코딩 테스트 문제 풀 때 유용할 것 같다.
“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”