dict의 루핑 기술과 컴프리헨션

김건우·2021년 12월 22일
0

파이썬

목록 보기
14/18
post-thumbnail

딕셔너리 루핑 테크닉

보편적인 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)' 객체라고 한다.

  • 뷰 객체도 iterable 객체이다.

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}
profile
공부하는 개발자가 목표입니다.

0개의 댓글