
dict
연산
- 하나있어요..
score = {'guebin':49, 'iu':80}
score
- in은 사실 다른자료형도 가능했음
(관찰1)
(관찰2)
(관찰3)
score = [['guebin',49],['iu',80],['hynn',99]]
score
[['guebin', 49], ['iu', 80], ['hynn', 99]]
- in연산자가 dict형에 사용되면 key를 기준으로 True, False를 판단한다.
메소드
(get)
score = {'guebin':49, 'iu':80}
score
아래와 같은 기능
미묘한 차이점이 존재함
score['hynn'] # hynn이 없어서 키에러 출력, 그런 key는 없다..
score.get('hynn') # hynn이 없으면 아무것도 출력안함
(keys,values,items)
- .keys()는 딕셔너리의 키를 리턴한다.
score = {'guebin':49, 'iu':80}
score
dict_keys(['guebin', 'iu'])
type(_keys) # 리턴된 자료형은 이상한것임
list(_keys) # 아무튼 그 이상한 자료형도 리스트화 가능
- .values()는 딕셔너리의 값들을 리턴한다.
_values =score.values()
_values
- .items()는 딕셔너리의 (키,값)을 리턴한다.
_items = score.items()
_items
dict_items([('guebin', 49), ('iu', 80)])
[('guebin', 49), ('iu', 80)]
for문
(예시1)
for i in score.keys():
print(i)
- 딕셔너리 그자체도 for문에 넣을 수 있다.
- i에는 value가 삭제되어 들어간다. (즉 key만)
- 결과를 보면 score대신에 score.keys()와 list(score)를 넣었을때와 결과가 같다.
Note: list(score) 하면 key만 리턴된다.
(예시2)
for v in score.values():
print(v)
(예시3)
for k in score.items():
print(k)
('guebin', 49)
('iu', 80)
(예시4)
for k,v in score.items():
print(k,v)
(예시5)
for k,v in score.items():
print(k + '의 중간고사 점수는 %s점 입니다.' % v)
guebin의 중간고사 점수는 49점 입니다.
iu의 중간고사 점수는 80점 입니다.
[보충학습] 문자열 새치기
- %는 새치기연산자임. %s는 새치기하는 자리라고 생각
보충학습끝
딕셔너리 고급
키는 문자열만 가능한 것이 아니다.
- 정수키
score = {0:49, 1:80, 2:99} # key를 0,1,2로
score
- 인덱싱은?
score[0] # 키로 인덱싱을 하고 있는데 마치 원소의 위치로 인덱싱을 하는 기분
- 그럼 혹시 이것도?
TypeError: unhashable type: 'slice'
키로가능한것? 문자열, 숫자값, 튜플
score = {('guebin',0): 10, ('guebin',1): 20, ('guebin',2):49} # 0은 출석점수, 1은 레포트 점수, 2는 중간고사 점수
score
{('guebin', 0): 10, ('guebin', 1): 20, ('guebin', 2): 49}
score[('guebin',3)] = 99 # 규빈의 기말고사 점수를 추가
{('guebin', 0): 10, ('guebin', 1): 20, ('guebin', 2): 49, ('guebin', 3): 99}
참고 (불변형과 가변형)
(인트형은 불변)
(문자열도 불변)
('guebin', 140553659148336)
('Guebin', 140553649883440)
(리스트는 가변)
(['g', 'u', 'e', 'b', 'i', 'n'], 140553645841408)
(['G', 'u', 'e', 'b', 'i', 'n'], 140553645841408)
set
원소추출
- 일단 인덱스로는 못합니다.
a={'notebook','desktop'}
a[0]
TypeError: 'set' object is not subscriptable
- 딱히 하는 방법이 없어요.. 그리고 이걸 하는 의미가 없어요.. (원소에 접근해서 뭐하려고??)
원소추가
- 이건 의미가 있죠
a={'notebook','desktop'}
a
{'desktop', 'ipad', 'notebook'}
a.add('notebook') # 이미 원소로 있는건 추가되지 않음.
a
{'desktop', 'ipad', 'notebook'}
원소삭제
a={'desktop', 'ipad', 'notebook'}
a
{'desktop', 'ipad', 'notebook'}
연산
- in 연산자
a={'desktop', 'ipad', 'notebook'}
a
{'desktop', 'ipad', 'notebook'}
- 합집합, 교집합, 차집합
day1 = {'notebook','desktop'}
day2 = {'notebook','ipad'}
{'desktop', 'ipad', 'notebook'}
- 부분집합
day1 = {'notebook', 'desktop'}
day2 = day1 | {'ipad'}
day1 < day2 # day1는 day2의 부분집합인가?
메소드
- 합집합
day1 = {'notebook', 'desktop'}
day2 = {'notebook','ipad'}
{'desktop', 'ipad', 'notebook'}
- 나머지 메소드는 스스로 찾아보세요
for문
day1 = {'notebook', 'desktop'}
day2 = {'notebook','ipad'}
for i in day1|day2:
print(i)
Quiz
길이가 4인 집합을 두개만들고 공통원소를 2개로 설정한뒤 합집합을 구하는 코드를 작성하라.