궁금증 연구소

안녕하세요. 궁금증연구소 입니다.

오늘 포스팅 주제는 "딕셔너리도 컴프리헨션이 가능하다." 입니다.

 

딕셔너리 컴프리헨션

나는 파이썬의 여러 기능중에 컴프리헨션 기능을 좋아한다. 반복문과 조건문을 많은 경우에 아주 짧은 문장으로

축약할 수 있기 때문이다. 파이썬이 C언어에 비해서 속도에 장점이 있는것도 아니고, 코딩시에 간결한 문장이 장점이라면, 컴프리헨션은 그 장점을 극대화 해주는 기능이라고 생각한다.

 

그동안 리스트만 컴프리헨션이 가능한 줄 알았는데, 딕셔너리도 가능하다.  리스트 갈호 [] 대신에 딕셔너리 {} 갈호를 적어주면 된다. 그렇다고 튜플 컴프리헨션 한다고 ()로 컴프리헨션 하면 안된다. ()은 제너레이터를 만든다.

 

위와같이 d1에 간단한 딕셔너리를 하나 만들어주고, d2와 같이 만들면 된다.

 

딕셔너리의 키,value 값으로 이루어진 뷰객체를 리턴하는 items 메소드를 for문의 iterable 객체 위치에 넣어준후 k,v 를 언패킹한 값을 활용해 새로운 딕셔너리의 값 체계를 쉽게 만들수 있다. 위 코드는 value 값을 각각 2배씩 해서 딕셔너리를 새로 만드는 코드이다.

 

 

d1.items()

딕셔너리로 객체의 대표적 메소드는 items, keys, values 가 있는데 이들 각각의 흔히 view객체라고 불린다. view객체들은 for문에 넣어 값을 빼올수 있는 것으로 보아 iterable 한 객체로 보인다. (iterator는 아니다.) 위와 같이 패킹할수 있는 횟수가 1회성이 아니라, 계속해서 unpacking이 되는것으로 보아 iterable 객체이다.

 

1회용 iterator

당연하게도 item객체를 iter()함수를 통해 이터레이터로 만들었더니, 1회 언패킹 후에 빈 리스트를 반환한다.

 

딕셔너리 언패킹

딕셔너리 값을 함수의 매개변수 값으로 쉽게 넣는 방법이 있는데 *,** 를 활용하는 것이다.

위와 같이 딕셔너리를 *d 형태로 함수의 매개변수로 unpacking 하면 key 값이 삽입되고,

**d 형태로 unpacking 하면 value 값이 삽입 되는 것을 볼 수 있다.

 

keys, values 값 unpacking

딕셔너리 view객체 값을 언패킹 해도 같은 결과를 볼 수 있다. 재밌는 것은 d.items의 경우는 언패킹 했을 때 키,밸류 값이 각각 튜플 형태로 값이 삽입된다는 점이다.

 

d.itesm()가 unpacking 될때 결과

 

 

 

 

 

 

 

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading