AI/Python
[python] 딕셔너리 setdefault과 get
brave_sol
2024. 12. 21. 10:00
1. setdefault
- 딕셔너리에 새로운 key와 value를 추가할 때, if 로 해당 key가 있는지 확인하는 과정을 간소화 해줌
- 해당 값이 없으면 지정한 default값을 반환, 있으면 원래 값을 반환
clothes = [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
item_book = {}
for item, ctg in clothes:
item_book.setdefault(ctg,[]).append(item)
item_book
# {'headgear': ['yellow_hat', 'green_turban'], 'eyewear': ['blue_sunglasses']}
2. setdefault와 get의 차이
- 키가 없을 때, get은 값만 반환하고 딕셔너리는 그대로, setdefault는 딕셔너리에 기본값을 추가 한다.
item_book = {}
item_book.setdefault("headgear", 0) # 0 # header가 0으로 추가됨
print(item_book) # 출력: {'headgear': 0}
item_book.get("eyewear", 1) # 1
print(item_book) # 출력: {'headgear': 0} # eyewear가 추가되진 않음
3. keys, values, items
1) keys(): 모든 키를 가져온다
2) values(): 모든 값을 가져온다
3) items(): (키,값) 튜플의 리스트를 가져온다.
item_book.keys() # dict_keys(['headgear', 'eyewear'])
item_book.values() # dict_values([['yellow_hat', 'green_turban'], ['blue_sunglasses']])
item_book.items() # dict_items([('headgear', ['yellow_hat', 'green_turban']), ('eyewear', ['blue_sunglasses'])])
4. 2차원 배열을 1차원으로(리스트 컴프리헨션: 바깥루프→안쪽루프 순으로 작성)
# item_book.values() = dict_values([['yellow_hat', 'green_turban'], ['blue_sunglasses']])
result = []
for i in item_book.values(): # 바깥루프
for j in i: # 안쪽루프
result.append(j)
result # ['yellow_hat', 'green_turban', 'blue_sunglasses']
[j for i in item_book.values() for j in i] # ['yellow_hat', 'green_turban', 'blue_sunglasses']
# (참고) 잘못된 순서 : i는 정의 되지 않은 상태에서 먼저 사용되서 이상한 값이 나옴
[j for j in i for i in item_book.values()] # ['blue_sunglasses', 'blue_sunglasses']
반응형