출처: 전문가를 위한 파이썬 p115
3.3.1 존재하지 않는 키를 setdefault()로 처리하기
데이터의 구조를 변경하다보면 dictionary 의 특정 key의 list 형 value에 값을 추가하는 경우가 많다.
여태 아래와 같이 짰는데, 새로운 방법을 안 상태에서 보니까 뭔가 부끄럽다(...)
result = {}
# data_list: [{}, {}, ...]
for d_dict in data_list:
for k, v in d_dict.items():
if not k in result.keys():
result[k] = []
result[k].append(v)
result = {}
# data_list: [{}, {}, ...]
for d_dict in data_list:
for k, v in d_dict.items():
value_list = result.get(k, [])
value_list.append(v)
result[k] = value_list
조건문 처리를 안 하는지라 좀 더 깔끔해진 것도 같은데, 코드 라인 수도 1번과 동일하고, result.get에서 한 번, result[k] 에서 한 번, result 라는 dict를 총 두 번 검색하는 방법이라 효율적이지 않다.
result = {}
# data_list: [{}, {}, ...]
for d_dict in data_list:
for k, v in d_dict.items():
result.setdefault(k, []).append(k)
세 줄짜리가 한 줄로 줄어들었다! 가독성도 좋아졌고, result 란 dict를 한 번만 조회하게 됨으로써 성능면에서도 효율적이다.