연산
-
하나있다.`
score={'boram':49, 'iu':80}
score
-
in은 사실 다른 자료형도 가능하다`
(관찰1)
(관찰2)
(관찰3)
score=[['boram',49], ['iu',80]]
score
[['boram', 49], ['iu', 80]]
-
in 연산자가 dict형에 사용되면 key를 기준으로 True, False을 판단한다.
메소드
(get)
score={'boram':49, 'iu':80}
score
아래와 같은 기능
미묘한 차이점이 존재함
score['hynn'] # hynn이 없어서 키에러 출력, 그런 key는 없다..
score.get('hynn') #hynn이 없으면 아무것도 출력안함
(kyes, values, items)
-
.keys()는 딕셔너리의 키를 리턴한다.
score={'boram':49, 'iu':80}
score
dict_keys(['boram', 'iu'])
type(_keys) # 모르는 자료형이지만, list나 tuple과 같이 자료형을 바꿀수 있다.
list(_keys) # 아무튼 그 이상한 자료형도 리스트화가 가능
-
.values()는 딕셔너리의 키를 리턴한다.
_values=score.values()
_values
-
.items()는 딕셔너리의 키를 리턴한다.
_items=score.items()
_items
dict_items([('boram', 49), ('iu', 80)])
[('boram', 49), ('iu', 80)]
-
for문에서의 dict
(예시1)
for i in score.keys():
print(i)
- 딕셔너리 그자체도 for문에 넣을 수 있다.
- i에는 value가 삭제되어 들어간다. (즉 key만)
- 결과를 보면 score대신에 score.keys()와 list(score)를 넣었을때와 결과가 같다.
Note: list(score)하면 key만 리턴된다.
(예시2)
for i in score.values():
print(i)
(예시3)
for k in score.items():
print(k)
(예시4)
for i,j in score.items():
print(i,j)
(예시5)
for i,j in score.items():
print(i + '의 중간고사 점수는 %s점입니다' %j)
boram의 중간고사 점수는 49점입니다
iu의 중간고사 점수는 80점입니다
[보충학습] 문자열 새치기
- %는 새치기연산자임. %s는 새치기하는 자리라고 생각
보충학습끝
딕셔너리 고급
키는 문자열만 가능한 것이 아니다.
-
정수키
score = {0:49, 1:80, 1:99} # key를 0,1,2로
score
-
인덱싱은?
score[0] # 키로 인덱싱을 하고 있는데 마치 원소의 위치로 인덱싱을 하는 기분
-
그럼 혹시 이것도?
TypeError: unhashable type: 'slice'
-
key로 가능한 것이 문자열만 가능한 것이 아니라 다른 것도 가능하다. (숫자,튜플,,)
(예시)
score={(0,'boram'):49, (1, 'iu'):80, (2, 'hynn'):99}
score
{(0, 'boram'): 49, (1, 'iu'): 80, (2, 'hynn'): 99}
score[0,'boram'] #tuple이니까 가로 생략 가능
(예시)
score={('boram',0):10, ('boram',1):20, ('boram',2):30} #0은 출석점수, 1은 레포트 점수, 2는 중간고사 점수
score
{('boram', 0): 10, ('boram', 1): 20, ('boram', 2): 30}
score[('broam,3')] = 99 # 보람의 기말고사 점수를 추가
{('boram', 0): 10, ('boram', 1): 20, ('boram', 2): 30, 'broam,3': 99}
-
문자열, 숫자값, 튜플의 공통점? 불변객체
a=22 # 22로 수정된 것이 아니고 재할당된것임..
TypeError: 'str' object does not support item assignment
# 수정이랑 재할당을 구분하는 방법 -> 메모리 주소 값을 찍어보면 된다.
[참고로만]
(인트형은 불변)
(문자열도 불변)
(리스트는 가변)
(['b', 'o', 'r', 'a', 'm'], 2254989018304)
(['B', 'o', 'r', 'a', 'm'], 2254989018304)
집합
선언
a={'notebook', 'desktop'}
원소추출
-
일단 인덱스로는 못한다.
a={'notebook', 'desktop'}
a[0]
TypeError: 'set' object is not subscriptable
-
딱히 하는 방법이 없다. 그리고 이걸 하는 의미가 없다. 원소에 접근해서 뭐하려고…!!
원소추가
-
이건 의미가 있다.
a={'notebook', 'desktop'}
{'desktop', 'ipad', 'notebook'}
a.add('notebook') # 이미 원소로 있는 건 추가 되지 않음
a
{'desktop', 'ipad', 'notebook'}
원소삭제
연산
-
in 연산자
a=('desktop','ipad','notebook')
a
('desktop', 'ipad', 'notebook')
-
참고로 in
연산자는 집합에서만 쓰는 것은 아님
-
합집합, 교집합, 차집합
day1 = {'notebook', 'desktop'}
day2 = {'notebook', 'ipad'}
{'desktop', 'ipad', 'notebook'}
-
부분집합
day1={'notebook','desktop'}
day2= day1 | {'ipad'}
{'desktop', 'ipad', 'notebook'}
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)
(숙제) 길이가 4인 집합을 두개만들고 공통원소를 2개로 설정한 뒤 합집합을 구하는 코드를 작성하라.
boram={'father','mother','me','coco'}
su={'father','mother','su','name'}
{'coco', 'father', 'me', 'mother', 'name', 'su'}