[Python] - Comprehending Dict

김진수·2020년 11월 30일
0
post-thumbnail
post-custom-banner

이번에는 지능형 딕셔너리(Comprehending Dict)에 대하여 알아보겠습니다.

사실 dictionary는 list 만큼 comprehension이 유용하지 않습니다. 하지만 길이가 같은 리스트 2개를 각각 Key Value로 삼아 딕셔너리로 형변환 하고자 한다면 유용하게 사용할 수 있습니다

기본형

형식

a = {i : j for i, j in sub}

일반적인 for문을 돌면서 i, j값을 key와 value로 나누어 i:j형태로 출력하는 것이다.

예를들어

familly = [(mother,"홍영희"), (father,"김진짜"),(brother,"김길동"),(sister,"김소희")]

n_code1 = {familly : name for country, code in familly}
n_code2 = {familly.upper() : name for country, code in familly}

for문을 통해 familly요소를 하나씩 가져와 앞에 부분은 famill에, 뒤에 부분은 name에 저장되어 출력된다. 예를 들어 familly를 각각 (mother,"홍영희"), (father,"김진짜")(brother,"김길동"), (sister,"김소희")로 나누어 dict형태로 mother,father,brother,sister은 key, "홍영희","김진짜","김길동","김소희"는 value나뉘어 출력합니다.

Dict Setdefault

source = (('k1','val1'),
         ('k1','val2'),
         ('k2','val3'),
          ('k2','val4'),
          ('k2','val5')
         )
         
new_dict1 = {}
# no use setdefault
for k, v in source:
    if k in new_dict1:
        new_dict1[k].append(v)
    else:
        new_dict1[k] = [v]
        
print('ex 3-1 -',new_dict1)         

source인 각 튜플을 key와 value로 구분하여 key가 new_dict에 있으면 요소를 key에 해당하는 리스트에 넣어주고, 없으면 new_dict1에 key와 해당하는 value를 리스트로 만들어준다.

이를 훨씬 간단하게 구현하는 방법이 있다. python dict에서는 dict setdefault를 제공하는데 이를 이용하면 위 코드를 간단하게 바꿀 수 있다.

for k,v in source:
    new_dict2.setdefault(k,[]).append(v)

k값이 new_dict2에 있으면 v를 append를 하고 없으면 []를 통해 새로운 key를 생성하고 value부분에 v를 append한다.

profile
백엔드 개발자
post-custom-banner

0개의 댓글