님들 안녕하세요. 14년 차 IT개발자 데니예요. 지난 시간에 파이썬 딕셔너리(Dictionary)에 대한 개념과 사용법에 대해서 살펴보았어요. 이번 시간에는 딕셔너리를 더 깊게 살펴보는 시간을 가져 볼게요. 딕셔너리 심화 실습과 내장 함수 사용 방법에 대해서 학습해 보아요. 자 시작할게요!
8.2 파이썬 딕셔너리(Dictionary) 자료형(심화, 관련 함수)
▶ 딕셔너리 심화 실습
이전 강의에서 딕셔너리는 데이터를 표형식으로 나타낼 수 있는 자료형이라고 말씀드렸어요. 어떻게 딕셔너리로 표형식을 나타낼 수 있을까요? 누구나 한 번 이상은 받아 보았던 하지만 받고 싶지 않았던 성적표를 가지고 파이썬 딕셔너리 심화 실습을 진행해 볼게요.
님들이 선생님이라고 가정하시고 시작할게요. 님들 반에는 2명의 학생이 있어요. 이름은 홍길동, 페니예요. 이 둘은 시험을 보았고, 선생님께서는 시험 결과를 파이썬 딕셔너리를 이용해서 저장하려고 해요. 표 칼럼명은 이름, 성별, 평균점수, 석차예요. 즉, 딕셔너리 Key는 '이름', '성별', '평균점수', '석차'가 될 거예요. Value는 1명 이상의 학생 성적을 가지고 있어야 하므로 리스트 []를 사용해야 해요. 우선 홍길동 학생의 석정으로 딕셔너리를 생성하고, 페니 학생의 성적을 추가하는 방식으로 실습을 진행해 볼게요. 이번 실습에서는 실습창마다 변수명을 변경하지 않고 report_card로 고정적으로 사용할 거예요.
1
2
3
4
|
>>> report_card = {'이름':['홍길동'], '성별':['남자'], '평균점수':[95], '석차':[2]}
>>> report_card
{'이름': ['홍길동'], '성별': ['남자'], '평균점수': [95], '석차': [2]}
>>>
|
cs |
라인[1]은 Key는 '이름', '남자', '평균점수', '석차'이고, Value는 리스트를 갖는 딕셔너리를 생성해서 report_card에 대입했어요.
라인[2]~[3]은 report_card 딕셔너리를 출력해서 정상적으로 생성되었는지 확인해 보았어요.
1
2
3
4
5
6
7
|
>>> report_card['이름'].append('페니')
>>> report_card('성별'].append('여자')
>>> report_card('평균점수').append(98)
>>> report_card('석차').append(1)
>>> report_card
{'이름': ['홍길동', '페니'], '성별': ['남자', '여자'], '평균점수': [95, 98], '석차': [2, 1]}
>>>
|
cs |
라인[1]~라인[4]는 페니 학생의 성적 데이터를 딕셔너리에 존재하는 각 Key에 연결된 리스트 내 요소로 추가해 주었어요. report_card[딕셔너리 key].append(리스트 내 요소로 추가할 값) 표현방법을 사용해서 딕셔너리 Key를 이용해서 연결된 Value에 접근하였고, Value가 리스트이므로 리스트 내장함수인 append 함수를 사용해서 해당 리스트 내 요소 값을 추가했어요
라인[5]~[6]은 report_card 딕셔너리에 페니 학생의 성적이 정상적으로 추가되었는지 확인해 보았어요.
1
2
3
4
|
>>> report_card['연락처'] = ['01012341234', '01043214321']
>>> report_card
{'이름': ['홍길동', '페니'], '성별': ['남자', '여자'], '평균점수': [95, 98], '석차': [2, 1], '연락처': ['01012341234', '01043214321']}
>>>
|
cs |
라인[1]은 report_card 딕셔너리에 새로운 Key:Value 쌍을 추가해 주었어요. 즉, 성적표에 '연락처' 칼럼명을 추가하고, 홍길동 학생과 페니 학생의 연락처를 칼럼명에 연결된 값으로 추가했어요.
라인[2]~[3]은 report_card 딕셔너리에 '연락처':['01012341234', '01043214321'] 쌍이 정상적으로 추가되었는지 확인해 보았어요.
이번 실습은 님들께서 아직 배우시지 않은 import와 판다스(Pandas) 패키지를 간단히 사용하여 표를 출력해 보고, 해당 표를 엑셀파일로 저장해 볼 거예요. 이번 실습은 딕셔너리와 리스트를 이용해서 표를 만들고 엑셀로 출력할 수 있다는 것을 보여드리고 싶어서 아직 학습하지 않으신 부분을 활용해서 실습하는 거니 양해부탁드려요. 이번 실습을 하기 위해서 엑셀파일을 저장할 폴더를 만드셔야 해요.
저는 아래 그림처럼 C드라이브의 하위 폴더로 test폴더를 만들었어요.(경로 : C:\test)
이번 실습은 조금 이해가지 않아도 따라와 주시면 감사하겠어요. 이해 목적이 아닌 결과 확인 목적이기 때문이에요. 해당 실습에서 다루는 내용은 모두 앞으로 강의 내용으로 포스팅할 예정이에요.
1
2
3
4
5
6
7
8
|
>>> import pandas
>>> table = pandas.DataFrame(report_card)
>>> table
이름 성별 평균점수 석차 연락처
0 홍길동 남자 95 2 01012341234
1 페니 여자 98 1 01043214321
>>> table.to_excel('C:/test/report_card.xlsx')
>>>
|
cs |
라인[1]에서 import는 누군가 미리 패키지나 모듈 형식으로 작성해 놓은 소스코드를 가져와서 사용할 수 있도록 해주는 명령어라고 알아두시면 돼요. 우리는 pandas 패키지에 작성된 DataFrame클래스를 사용하기 위해서 import pandas를 사용했어요. 자세한 설명은 모듈과 패키지 강의에서 다룰 테니까 어렵다고 포기하지 마시고 따라와 주시면 감사하겠어요.
라인[2]는 우리가 import한 pandas 패키지에 정의된 DataFrame이라는 클래스를 사용해서 table객체를 생성하겠다는 의미예요. 클래스도 클래스 강의에서 다룰 테니 이런 게 있구나라고만 생각해 주세요.
라인[3]~[6]은 table 데이터프레임 객체를 출력해 봤어요. 우리가 생각했던 성적표가 표형식으로 출력되었어요.
라인[7]은 성적표를 엑셀 파일로 저장하는 명령이에요. table 객체에 to_excel 함수를 사용했어요. to_excel함수에 인자로 폴더 경로와 파일명을 문자열로 주었어요.
우리가 원한 경로(C:\test\report_card.xlsx')에 report_card(성적표) 엑셀 파일이 잘 생성되었는지 확인해 봐야겠죠. 파일 탐색기를 열어서 해당 폴더에 들어가면 아래 그림처럼 엑셀 파일이 생성되어 있는 걸 확인하실 수 있어요.
엑셀 파일을 열면 아래 그림처럼 우리가 만든 성적표 내용을 확인하실 수 있어요. 여기까지 완료하셨다면 정말 잘하셨다고 말씀드리고 싶어요.
▶ keys() 내장함수
keys()함수는 딕셔너리의 Key 값만 모아서 dict_keys 객체로 반환해 주는 함수예요.
1
2
3
4
5
6
7
|
>>> dict10 = {'이름':'홍길동', '성별':'남자', '평균점수':95, '석차':2}
>>> dict10.keys()
dict_keys(['이름', '성별', '평균점수', '석차'])
>>>
>>> list(dict10.keys())
['이름', '성별', '평균점수', '석차']
>>>
|
cs |
라인[1]은 딕셔너리를 생성해서 dict10변수에 대입했어요.
라인[2]~[3]는 딕셔너리 내장함수 keys()를 사용해서 dict10 딕셔너리의 key 값들을 dict_keys 객체형태로 반환받았어요. dict_keys 객체는 리스트 형태로 변환해서 사용할 수 있어요.
라인[5]~[6]은 딕셔너리 내장함수 keys()를 사용해서 반환받은 dict_keys 객체를 list 자료형으로 변환했어요.
1
2
3
4
5
6
7
8
|
>>> for key in dict10.keys():
... key
...
'이름'
'성별'
'평균점수'
'석차'
>>>
|
cs |
라인[1]~[3]은 "3. 파이썬 맛보기 강의"에서 소개한 for문을 사용해서 dict10.keys() 내장함수를 통해 반환받은 key 값을 하나씩 출력해 주도록 반복문을 작성했어요.
라인[4]~[7]은 dict10 딕녀서리의 key 값이 출력되었어요.
1
2
3
4
5
6
7
8
|
>>> for key in dict10.keys():
... dict10[key]
...
'홍길동'
'남자'
95
2
>>>
|
cs |
라인[1]~[3]은 for문을 사용해서 dict10.keys() 내장함수를 통해 반환 받은 key 값들을 하나씩 가져와 해당 key 값에 연결된 value 값을 출력하도록 반복문을 작성했어요.
라인[4]~[7]은 dict10 딕셔너리의 value 값이 출력되었어요.
▶ values() 내장함수
values()함수는 딕셔너리의 Value 값만 모아서 dict_values 객체로 반환해 주는 함수예요.
1
2
3
4
5
6
7
8
|
>>> for value in dict10.values():
... value
...
'홍길동'
'남자'
95
2
>>>
|
cs |
라인[1]은 딕셔너리를 생성해서 dict11변수에 대입했어요.
라인[2]~[3]은 values() 함수를 사용해서 dict_values 객체 형태의 value 값들을 반환받았어요.
라인[5]~[7]은 values() 함수를 사용해서 반환받은 dict_values 객체를 리스트 자료형으로 변환했어요.
▶ items() 내장함수
items()함수는 딕셔너리의 Key와 Value쌍을 튜플로 모아서 dict_items 객체로 반환해 주는 함수예요.
1
2
3
4
5
6
7
|
>>> dict12 = {'국어':100, '수학':95, '영어':98}
>>> dict12.items()
dict_items([('국어', 100), ('수학', 95), ('영어', 98)])
>>>
>>> list(dict12.items())
[('국어', 100), ('수학', 95), ('영어', 98)]
>>>
|
cs |
라인[1]은 국어, 수학, 영어 점수 key:value쌍을 요소로 갖는 딕셔너리를 생성해서 dict12 변수에 대입했어요.
라인[2]~[3]은 items()함수를 사용하여 key와 value쌍을 튜플로 묶어서 dict_items 객체로 반환받았어요.
라인[5]~[6]은 dict_items 객체를 list 자료형으로 변환했어요.
▶ get() 내장함수
get()함수는 딕셔너리 key 값을 get()함수의 인자로 받아서 딕셔너리의 value 값을 반환해 주는 함수예요.
1
2
3
4
5
6
7
8
9
10
11
12
|
>>> dict13 = {'이름':'홍길동', '성별':'남자', '나이':27, '주소':'서울시', '전화번호':'01012341234'}
>>> dict13.get('이름')
'홍길동'
>>> dict13.get('성별')
'남자'
>>> dict13.get('나이')
27
>>> dict13.get('주소')
'서울시'
>>> dict13.get('전화번호')
'01012341234'
>>>
|
cs |
라인[1]은 홍길동씨의 이름, 성별, 나이, 주소, 전화번호를 딕셔너리로 생성해서 dict13 변수에 대입했어요.
라인[2]~[11]은 get()함수에 딕셔너리의 key 값을 인자로 주어 key에 연결된 value를 출력했어요.
1
2
3
4
5
6
7
8
9
10
|
>>> dict13.get('직장명')
>>>
>>> dict13.get('직장명', 'Google')
'Google'
>>>
>>> dict13['직장명']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '직장명'
>>>
|
cs |
라인[1]은 get()함수에 '직장명'을 인자로 주었어요. dict13 딕셔너리에는 '직장명'이라는 key 값이 없기 때문에 None 값을 반환받았어요.
라인[3]~[4]는 get() 함수에 '직장명'과 'Google'로 2개 값을 인자로 주었어요. '직장명'이라는 key 값이 없다면 디폴트로 'Google'이라는 값을 value 값으로 반환하라는 의미예요. 결과적으로 'Google'이 출력되었어요.
라인[6]~[9]는 dict13['직장명'] 일반적인 표현방식으로 딕셔너리의 key 값을 이용해서 value에 접근하려 했어요. '직장명'이라는 key가 없기 때문에 KeyError 오류가 발생했어요.
get()함수는 key가 없다면 None 값을 반환하거나 디폴트 값을 반환해 주어요. 일반적인 key:value 접근 방법은 key가 없다면 오류를 발생시켜요.
▶ clear() 내장함수
clear()함수는 딕셔너리 안에 모든 요소를 삭제하는 함수예요.
1
2
3
4
5
|
>>> dict14 = {1:'a', 2:'b'}
>>> dict14.clear()
>>> dict14
{}
>>>
|
cs |
라인[1]은 딕셔너리를 생성해서 dict14 변수에 대입했어요.
라인[2]~[4]는 clear()함수를 사용해서 딕셔너리 안에 모든 요소를 삭제했어요.
님들 오늘은 딕셔너리의 마지막 시간이었어요. 딕셔너리에 대해서 심화된 실습을 진행해 보았고요. 아직 학습하진 않았지만, Pandas 패키지를 사용해서 딕셔너리를 표형식으로 출력해 보았어요. 뿐만 아니라 그 표를 엑셀로 저장해 보았어요. 파이썬을 능숙하게 사용하게 되시면 엑셀 파일을 로드하여 파이썬에서 엑셀과 비슷한 작업을 하실 수 있어요. 엑셀에 데이터가 많다면 파이썬으로 로드해서 작업하시는 게 작업 시간 단축에 유리할 거예요. 그리고 딕셔너리 내장 함수를 학습해 보았어요. 내장 함수 정에 keys(), values(), items() 함수는 실무에서도 많이 사용하고 있으니 사용방법 꼭 익혀주시길 바랄게요. 오늘은 여기까지 할게요.
'파이썬 독학 > 입문 강의' 카테고리의 다른 글
[파이썬독학강의] 10. 파이썬 집합(Set) 자료형 (0) | 2023.03.24 |
---|---|
[파이썬독학강의] 9. 파이썬 논리형(bool) (0) | 2023.03.12 |
[파이썬독학강의] 8.1 파이썬 딕셔너리(Dictionary) 자료형 (0) | 2023.02.25 |
[파이썬독학강의] 7. 파이썬 튜플(Tuple) 자료형 (0) | 2023.02.20 |
[파이썬독학강의] 6.2 파이썬 리스트 함수 (0) | 2023.02.13 |