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 |