2024.02.06. 화 학습내용
1. 딕셔너리(dictionary)란?
- dictionary 는 단어 그대로 해석하면 사전이라는 뜻
- “people”이라는 단어는 “사람”, “baseball”이라는 단어는 “야구”에 부합되듯이 dictionary는 Key와 Value를 한 쌍으로 갖는 자료형
- 딕셔너리 타입은 immutable(불변)한 key와 mutable(변하기 쉬운) value로 맵핑되어있는 순서가 없는 집합
1) 데이터 저장 형태
딕셔너리는 key와 value 값과 그 값을 빠르게 탐색할 수 있는 {키, 값} 같이 저장함
2) 순서가 존재하지 않는 데이터 타입! (주머니같은 구조!)
cf. 리스트 - 인덱스 부여됨. 값이 0,1,2번째 순서 존재했음
ex.[’A’, 3, [ ] ]
- 딕셔너리는 순서가 없는 자료형으로 리스트, 튜플, 문자열 과 달리 인덱싱, 슬라이싱 사용 불가
- 순서 빨리 찾아야겠다→리스트(순서대로 정렬해야겠다!)
- 순서 상관없지만 데이터 빨리 꺼내고 싶다! →딕셔너리
(탐색 용이한 데이터타입)
<딕셔너리 문법>
- 딕셔너리명 = {Key : Value, Key : Value, … }ex. a = { }ex. c = { 1 : 5, 2 : 3}
- ex. b = {”name” : “BG”}
- ※ Key 에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.
1. 딕셔너리 생성 - {}
a = {} # 빈 딕셔너리
b = {"name" : "hd"} #자: 아이템 1개 들어가 있다!
c = { 1:2, 3:4} #숫자를 이용한 딕셔너리
cf. java - hashmap
2. 딕셔너리 길이 확인 - len()
print(len(a)) # 0
print(len(c)) # 2
3.데이터 타입 확인 - type()
print(type(a)) #<class 'dict'> #모두 객체!
파이썬은 모든 데이터타입이 객체다!(숫자마저도!!!)
4.딕셔너리에 값 추가 - [’key’] = ‘value’
a['name'] = 'hhd' #값 추가시 key와 value를 작성
a #출력: {'name': 'hhd'}
5. 값 가져오기 dictionary[’key’] vs dictionary.get(’key’)
print(a['name']) #인덱스 위치에 key 값을 작성 #출력 : hhd
#print(a['age']) #없는 키 값을 작성하는 경우 예외 발생
print(a.get('age')) #없는 키 값을 작성하는 경우 None 자:get함수 #출력:None
- dictionary[’key’] : 없는 키 값을 작성하는 경우 예외 발생 (예외처리 필요)
- dictionary.get(’key’) : 없는 키 값을 작성하는 경우 None 반환
- none(리턴되지 않음!) == 자바의 null과 비슷
(둘 중 하나 사용하면 됨)
get(x, ‘디폴트값’)
딕셔너리 안에 찾으려는 Key 값 x가 없을 경우 →미리 정해 둔 디폴트 값 대신 가져오게 하고 싶을때
6. 딕셔너리 유용한 함수
song = {"노래제목" : "Love wins all",
"가수" : "아이유",
"앨범유형" : "싱글/EP",
"장르": "가요/발라드"}
6-1) key 값들만 꺼내고 싶은 경우 - dictionary.keys()
#key 값들만 꺼내고 싶은 경우
song.keys()
#출력: dict_keys(['노래제목', '가수', '앨범유형', '장르'])
6-2) value 값들만 꺼내고 싶은 경우 - dictionary.values()
#value 값들만 꺼내고 싶은 경우
song.values()
#출력:dict_values(['Love wins all', '아이유', '싱글/EP', '가요/발라드'])
6-3) for문이랑 함께 쓰는 경우->key 값을 중심으로 동작
#for문이랑 함께 쓰는 경우 ->key 값을 중심으로 동작
for data in song :
print(data)
#출력:
#노래제목
#가수
#앨범유형
#장르
⇒key값 선회해서 출력됨
6-4) in/ not in을 딕셔너리에 쓰는 경우-> key값을 중심으로 동작
# in / not in 을 딕셔너리에 쓰는 경우 -> key값을 중심으로 동작
print("가수" in song) #출력 : True
print("아이유" in song) #출력 : False
6-5) 딕셔너리에 각 아이템을 접근하고 싶은 경우 - dictionary.items()
# 딕셔너리에 각 아이템을 접근하고 싶은 경우
# 주의) 순서가 항상 똑같다는 보장 x
for k,v in song.items():
print(k, v)
#출력:
#노래제목 Love wins all
#가수 아이유
#앨범유형 싱글/EP
#장르 가요/발라드
(마치 2차원 리스트처럼 꺼내줌)
(딕셔너리는 순서 보장x)
6-6 ) dictionary.items() ⇒(key, Value) 쌍 가져옴
song.items()
#출력 : dict_items([('노래제목', 'Love wins all'), ('가수', '아이유'), ('앨범유형', '싱글/EP'), ('장르', '가요/발라드')])
6-7) 데이터 삭제(전체 - clear())
song = {"노래제목" : "Love wins all",
"가수" : "아이유",
"앨범유형" : "싱글/EP",
"장르": "가요/발라드"}
# 전체 데이터 삭제
song.clear()
song #출력: {}
6-8) 데이터 삭제(하나 - del())
a['name'] = 'hhd' #값 추가시 key와 value를 작성
a #출력: {'name': 'hhd'}
# 데이터 하나 삭제
del a['name']
a #출력:{}
딕셔너리 실습
score_dict = {'이름' : ['김가가', '김나나', '김다다', '김라라', '김마마'],
'Python' : [90, 100, 85, 90, 80],
'Java' : [85, 80, 100, 95, 85],
'html/css' : [75, 70, 90, 80, 90]}
score_dict
#풀이
#1, 검색할 이름의 존재 여부 확인
input_name = input("검색할 이름을 입력 : ")
if input_name in score_dict['이름']:
i = score_dict['이름'].index(input_name)
avg = (score_dict['Python'][i] + score_dict['Java'][i] + score_dict['html/css'][i]) / 3
print(f"{input_name}의 전과목 성적 평균 {round(avg, 2)}")
else:
print("검색결과가 없습니다")
index함수 사용⇒찾고자하는 값x 의 인덱스를 리턴해준다!!!
2. 집합이란?
- 집합연산을 할 수 있는 데이터타입
- 합집합, 차집합, 교집합 연산이 가능
- 순서가 없다
- 중복을 허용하지 않는다.
집합 문법
1.집합의 생성(선언) - set()
my_set = set()
my_set #출력:set()
my_set2 = set([1,2,3,4,5])
my_set2 #출력:{1, 2, 3, 4, 5}
my_set3 = set(['a','p','p','l','e'])
my_set3 #출력:{'a', 'e', 'l', 'p'}
my_set4 = set([3,4,7,8,9])
my_set4#출력:{3, 4, 7, 8, 9}
집합연산(합집합, 교집합, 차집합)
my_set2 = set([1,2,3,4,5])
my_set2 #출력:{1, 2, 3, 4, 5}
my_set4 = set([3,4,7,8,9])
my_set4#출력:{3, 4, 7, 8, 9}
집합연산(합집합, 교집합, 차집합)
my_set2 = set([1,2,3,4,5])
my_set2 #출력:{1, 2, 3, 4, 5}
my_set4 = set([3,4,7,8,9])
my_set4#출력:{3, 4, 7, 8, 9}
2.합집합 - |
my_set2 | my_set4 #출력 : {1, 2, 3, 4, 5, 7, 8, 9}
#my_set4 | my_set2 #동일결과
3.교집합 - &
my_set2 & my_set4 #출력 : {3, 4}
#my_set4 & my_set2 #동일결과
4. 차집합 - ‘-’
my_set4 - my_set2 #4번 집합만 고유하게 가진 내용 출력 #출력 : {7, 8, 9}
#my_set4 - my_set2 # 다른결과
'PYTHON' 카테고리의 다른 글
[python]사용자 정의 함수 (0) | 2024.02.13 |
---|---|
[python]데이터 핸들링 - 영화리뷰 분석 자료 (0) | 2024.02.07 |
[python]조건문(if, elif, else) (0) | 2024.02.04 |
[python]연산자(산술,지수,관계(비교), 대입(복합), 논리, 멤버, 삼항 연산자) (0) | 2024.02.02 |
[Python]파이썬 문자열 슬라이싱(slicing), 문자열 포매팅(Formating),문자열함수 (0) | 2024.02.01 |