에이블스쿨 6기 DX 트랙/일일 복습

DAY 03. 딕셔너리 자료형

d061120 2024. 9. 6. 20:31

6. 딕셔너리 자료형

  • 딕셔너리는 집합과 마찬가지로 중괄호({ }) 를 사용해 선언
  • 하지만 {Key1: Value1, Key2: Value2, Key3: Value3}의 형태를 가지므로 집합과 구분됨
  • 딕셔너리는 순서의 의미가 없으며, 키(Key)를 사용해 값(Value)을 확인
  • 리스트와 더불어 많이 사용되는 자료형

6.1. 딕셔너리 만들기

6.1.1. 딕셔너리 직접 만들기

1) 일정한 정보를 갖는 딕셔너리

  • 다음과 같이 요소를 아래로 나열하면 가독성이 좋아짐
# 이름:점수
score = {'홍길동': 100,
         '한여인': 90,
         '일지매': 90}

# 확인
score
---
{'홍길동': 100, '한여인': 90, '일지매': 90}

 

2) 다양한 정보를 갖는 딕셔너리

  • 리스트나 튜플을 Value로 가질 수 있음
# 다양한 정보를 갖는 딕셔너리
member1 = {'이름':'홍길동',
           '나이': 20,
           '지역':'서울', 
           '취미': ['독서', '여행', '걷기']}

# 확인
member1
---
{'이름': '홍길동', '나이': 20, '지역': '서울', '취미': ['독서', '여행', '걷기']}
# 마지막 취미를 검색하려면?
member2['취미'][-1]
---
'걷기'

→ Value가 리스트인 경우 인덱싱, 슬라이싱 가능

 

3) 숫자도 Key가 될 수 있음

# 숫자가 Key인 리스트
nums = {1:10, 2:20, 3:30}

# 확인
print(nums)
nums[1]
---
{1: 10, 2: 20, 3: 30}
10

 

4) 같은 Key 무시

  • 만일 Key가 같은 요소가 있으면 하나만 남기고 나머지는 무시됨
# 딕셔너리 만들기
# 키가 중복이 되면 중복 키 중 마지막 키의 값만 남는다.
score = {'홍길동': 100,
         '한여인': 90,
         '홍길동': 95,
         '한여인': 90,
         '한국인': 75,
         '일지매': 90}

# 확인
score
---
{'홍길동': 95, '한여인': 90, '한국인': 75, '일지매': 90}

 

[참고] Key가 될 수 없는 리스트

  • Key는 변경되면 안됨
  • 튜플은 변경 불가능한 자료형이지만, 리스트는 변경 가능한 자료형
  • 그러므로 리스트는 딕셔너리의 Key가 될 수 없음
# Key가 튜플인 딕셔너리
member = {('이름', '나이'): ['홍길동', 20]}

# 확인
member
---
{('이름', '나이'): ['홍길동', 20]}
# Key가 리스트인 딕셔너리(?)
member = {['이름', '나이']: ['홍길동', 20]}
# TypeError: unhashable type: 'list'
---
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[69], line 2
      1 # Key가 리스트인 딕셔너리(?)
----> 2 member = {['이름', '나이']: ['홍길동', 20]}

TypeError: unhashable type: 'list'

 

6.1.2.  딕셔너리로 자료형 변환

  • dict() 함수를 사용해 Key:Value 형태를 가질 수 있는 자료형을 딕셔너리로 변환
  • 대부분 리스트로 딕셔너리를 만든다.

1) 리스트 또는 튜플 → 딕셔너리 변환

# 리스트 만들기
members = [['홍길동', 100], ['일지매', 90], ['한여인', 90], ['강우동', 95]]
# 튜플의 경우
# members = (('홍길동', 100), ('일지매', 90), ('한여인', 90), ('강우동', 95))

# 딕셔너리로 변환
member_dic = dict(members)

# 확인
member_dic
---
{'홍길동': 100, '일지매': 90, '한여인': 90, '강우동': 95}

 

6.2. 딕셔너리 조회

  • 딕셔너리는 요소 순서가 없으므로 인덱싱과 슬라이싱을 할 수 없음
  • Key를 사용해 Value를 찾는 방식으로 조회
  • in 연산자를 사용해 해당 key가 있는지 확인할 수 있음
# 딕셔너리 만들기
members = {'이름': ['홍길동', '한사랑', '일지매', '박여인'], 
           '나이': [23, 21, 26, 25], 
           '지역': ['서울', '부산', '인천', '대전'], 
           '언어': ['자바', '파이썬', '파이썬', '닷넷']}

# 확인
members
---
{'이름': ['홍길동', '한사랑', '일지매', '박여인'],
 '나이': [23, 21, 26, 25],
 '지역': ['서울', '부산', '인천', '대전'],
 '언어': ['자바', '파이썬', '파이썬', '닷넷']}
# 이름 조회
print(members['이름'])

# 나이 조회
print(members['나이'])

# 나이 평균 구하기
age_avg = sum(members['나이']) / len(members['나이'])
print(age_avg)

# 지역 조회
print(members['지역'])

# 언어 조회
print(members['언어'])
---
['홍길동', '한사랑', '일지매', '박여인']
[23, 21, 26, 25]
23.75
['서울', '부산', '인천', '대전']
['자바', '파이썬', '파이썬', '닷넷']

 

6.3. 딕셔너리 변경, 추가와 삭제

  • 인덱스 대신 Key로 찾아 변경한다는 것 외에는 리스트와 같음

1) 변경, 추가

  • 없는 Key로 변경을 시도하면 Key:Value 형태로 추가됨
# 딕셔너리 만들기
member = {'이름': '홍길동',
          '나이': 20}
# 확인
print(member)

# 딕셔너리 요소 값 변경(나이 = 30)
member['나이'] = 30
# 확인
print(member)

# 딕셔너리에 요소 추가(취미 = 독서, 여행)
member['취미'] = ['독서', '여행']
# 확인
print(member)   # 있으면 변경, 없으면 추가
---
{'이름': '홍길동', '나이': 20}
{'이름': '홍길동', '나이': 30}
{'이름': '홍길동', '나이': 30, '취미': ['독서', '여행']}

 

2) 삭제

# 딕셔너리 만들기
member = {'이름': '홍길동',
          '나이': 20,
          '지역':'서울',
          '성별': 'M',
          '등급': 'Gold'}

# 확인
member
---
{'이름': '홍길동', '나이': 20, '지역': '서울', '성별': 'M', '등급': 'Gold'}

 

  • del 문으로 Key를 지정해 해당 요소를 삭제
# 지정한 요소 삭제
del member['나이']

# 확인
member
---
{'이름': '홍길동', '지역': '서울', '성별': 'M', '등급': 'Gold'}

 

  • pop() 메서드를 사용하면 Key를 지정해 요소를 삭제할 수 있음
  • 그리고 삭제된 요소의 Value를 반환받음
# 지정한 요소 삭제
del_member = member.pop('지역')

# 확인
print(del_member)
print(member)
---
서울
{'이름': '홍길동', '성별': 'M', '등급': 'Gold'}

 

  • popitem() 메서드로 Key 지정 없이 마지막 요소부터 삭제할 수 있음
  • 그리고 삭제된 요소의 key와 Value를 튜플 형태로 반환받음
# 임의 요소 삭제
del_member = member.popitem()

# 확인
print(del_member)
print(member)
---
('등급', 'Gold')
{'이름': '홍길동', '성별': 'M'}

 

  • 모든 요소 삭제는 딕셔너리 = { } 형태로 수행합니다.
# 딕셔너리에서 모든 요소 삭제
member= {}

# 확인
member
---
{}

 

6.4. 딕셔너리 관련 메서드

1) Key 확인

  • keys() 메서드를 사용해 Key 정보를 확인
  • 모든 Key를 요소로 갖는 dict_keys 개체를 반환
# 딕셔너리 만들기
member = {'이름': '홍길동',
          '취미': ['독서', '여행', '걷기']}
# 확인
print(member)

# Key 확인
member.keys()

# Key만 뽑아 리스트 만들기
member_keys = list(member.keys())
# 확인
print(member_keys)
---
{'이름': '홍길동', '취미': ['독서', '여행', '걷기']}
dict_keys(['이름', '취미'])
['이름', '취미']

 

2) Value 확인

  • values() 메서드를 사용해 Value 정보를 확인
  • 모든 Value를 요소로 갖는 dict_values 개체를 반환
# 위 코드에 이어서
# Value 확인
member.values()

# Value만 뽑아 리스트 만들기
member_values = list(member.values())
# 확인
print(member_values)
---
dict_values(['홍길동', ['독서', '여행', '걷기']])
['홍길동', ['독서', '여행', '걷기']]

 

3) Key, Value 확인

  • items() 메서드를 사용해 Key와 Value 정보를 확인
  • 모든 key와 value를 (key, value) 형태로 갖는 dict_items 개체를 반환
# 위 코드에 이어서
# Key, Value 확인
list(member.items())
---
[('이름', '홍길동'), ('취미', ['독서', '여행', '걷기'])]

 

4) 모든 요소 삭제

  • clear() 메서드를 사용해 모든 요소를 삭제
# 위 코드에 이어서
# 모든 요소 삭제
member.clear()

# 확인
member
---
{}

 

5) 찾기(없을 때 대신할 값 지정)

  • get() 메서드를 사용해 Key를 지정해 Value를 찾을 수 있음
  • Key로 Value를 찾을 수 없을 때 대신 반환할 값을 지정할 수 있음
# 딕셔너리 만들기
member = {'이름': '홍길동', '취미': ['독서', '여행', '걷기']}

# 확인
member
---
{'이름': '홍길동', '취미': ['독서', '여행', '걷기']}
# 이름 확인
member.get('이름')
---
'홍길동'
# 이메일 확인
member.get('이메일')
---
# 이메일 확인, 없으면 '없음' 표시
member.get('이메일', '없음')
---
'없음'

→ 대응되는 Value를 찾지 못할 경우 반환되는 값을 '없음'으로 지정하여 나타낼 수도 있다.

'에이블스쿨 6기 DX 트랙 > 일일 복습' 카테고리의 다른 글

DAY 05. 함수  (1) 2024.09.12
DAY 04. 제어문  (0) 2024.09.11
DAY 03. 집합 자료형  (0) 2024.09.06
DAY 03. 튜플 자료형  (0) 2024.09.06
DAY 02. 리스트 자료형  (0) 2024.09.06