티스토리 뷰

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']

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함