딕셔너리 루핑 테크닉
보편적인 for 루프구성
d = dict(a = 1, b = 2, c = 3) for k in d: print(d[k], end = ', ') # >> 1, 2, 3
딕셔너리의 메소드
dict.keys() : 딕셔너리의 키들만 참조
dict.values() : 딕셔너리의 값들만 참조
dict.items() : 딕셔너리의 키와 값을 튜플 형태로 참조
위의 세 메소드가 반환하는 것을 가리켜 '뷰(View)' 객체라고 한다.
keys 메소드
d = dict(a = 1, b = 2, c = 3) for k in d.keys(): print(k, end = ', ') > a, b, c
values 메소드
d = dict(a = 1, b = 2, c = 3) for v in d.values(): print(v, end = ', ') > 1, 2, 3
items 메소드
d = dict(a = 1, b = 2, c = 3) for kv in d.items(): print(kv, end = ', ') > ('a', 1), ('b', 2), ('c', 3)
items 메소드를 사용한 튜플 언패킹
d = dict(a = 1, b = 2, c= 3) for k, v in d.items(): print(k, v, sep = ', ') > a, 1 > b, 2 > c, 3
뷰가 바라보는 현재 상태
d = dict(a = 1, b = 2, c = 3) vo = d.items() # 뷰 객체 for kv in vo: print(kv, end = ' ') ('a', 1), ('b', 2), ('c', 3) d['a'] += 3 # 딕셔너리 수정 d['c'] -= 2 # 딕셔너리 수정 for kv in vo: # 수정 사항이 뷰 객체에 그대로 반영 print(kv, end = ' ') ('a', 4), ('b', 2), ('c', 1)
dict 컴프리헨션
리스트 컴프리헨션의 기본 구조
r1 = [1,2,3,4,5] r2 = [x * 2 for x in r1] > [2,4,6,8,10]
딕셔너리 컴프리헨션
d1 = dict(a = 1, b = 2, c = 3) d2 = {k : v*2 for k, v in d1.items()} # d1의 값을 두 배 늘린 딕셔너리 생성 d3 = {k : v*2 for k, v in d2.items()} # d2의 값을 두 배 늘린 딕셔너리 생성 > d1 {'a':1, 'b':2, 'c':3} > d2 {'a':2, 'b':4, 'c':6} > d3 {'a':4, 'b':8, 'c':12}
추가 예제
조건문이 추가된 컴프리헨션d1 = dict(a = 1, b = 2, c = 3) d2 = {k : v for k,v in d1.items() if v % 2 } > {'a':1, 'c': 3}
zip을 사용한 컴프리헨션
ks = ['a', 'b', 'c', 'd'] # 키 vs = [1, 2, 3, 4] # 값 d = {k: v for k,v in zip(ks, vs)} # zip을 이용해서 같은 위치의 값들을 묶어준다. > {'a':1, 'b':2, 'c':3, 'd': 4}
ks = ['a', 'b', 'c', 'd'] vs = [1, 2, 3, 4] d = {k: v for k, v in zip(ks, vs) if v % 2} > {'a':1, 'c':3}