파이썬 독학/입문 강의

[파이썬독학강의] 8.2 파이썬 딕셔너리(Dictionary) 자료형(심화, 관련 함수)

데니 by danny 2023. 2. 28. 00:42
반응형

파이썬 딕셔너리 심화 실습과 내장 함수
파이썬 딕셔너리 심화 실습과 내장 함수

님들 안녕하세요. 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
{'이름': ['홍길동''페니'], '성별': ['남자''여자'], '평균점수': [9598], '석차': [21]}
>>>
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
{'이름': ['홍길동''페니'], '성별': ['남자''여자'], '평균점수': [9598], '석차': [21], '연락처': ['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(성적표) 엑셀 파일이 잘 생성되었는지 확인해 봐야겠죠. 파일 탐색기를 열어서 해당 폴더에 들어가면 아래 그림처럼 엑셀 파일이 생성되어 있는 걸 확인하실 수 있어요.

 

 

report_card 엑셀파일 생성 확인
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 1in <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() 함수는 실무에서도 많이 사용하고 있으니 사용방법 꼭 익혀주시길 바랄게요. 오늘은 여기까지 할게요.

반응형