파이썬 딕셔너리 get(), setdefault()
'깔끔한 파이썬 탄탄한 백엔드'라는 책을 보다가 setdefault() 가 어떤 기능인지 궁금해서 찾아보았다.
책에서는 간단한 트위터 기능을 구현하는 예제에 나와 있는데,
특정 id(user 고유의 값)를 팔로우하거나 언팔로우할 때 해당 id가 중복되면 안 되기 때문에 setdefault() 를 사용한다고 했다.
리스트를 사용하면, 값이 중복되더라도 추가가되기 때문에 중복을 허용하지 않는 set을 사용한다.
그러면 어렵게 값을 재확인 할 필요가 없어진다 :)
단, 주의해야 하는 점이 있는데, set을사용한 후 return 을 할 때 json 형태로 하게 되면, 에러가 난다.
이러한 경우 리스트 형태로 변환해서 바꾸어 주어야 한다.
책에서는 문제를 해결하기 위해 커스텀 JSON 인코더를 통해 set 을 list 로 변경해준다. (코드는 아래에서 확인 가능)
https://github.com/rampart81/python-backend-book/blob/master/chapter5/app.py
파이썬 딕셔너리 get(), setdefault() 만들어본 예제
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | # dict get() # 딕셔너리를 하나 만든다. pre_char_dict = {} # 키, 값을 넣는다. pre_char_dict['a'] = 'apple' pre_char_dict['b'] = 'banana' pre_char_dict['c'] = 'candy' # get() # pre_char_dict 에 없는 키 'd' print(pre_char_dict.get('d')) # None print(pre_char_dict.get('d', 'ddd')) # ddd print(pre_char_dict) # ^ {'a': 'apple', 'b': 'banana', 'c': 'candy'} 기존 그대로. 키,값이 추가되지 않음 print(pre_char_dict.get('a')) # apple print(pre_char_dict.get('a', 'aaa')) # apple 출력. 값이 바뀌지 않는다. # setdefault() # pre_char_dict 에 없는 키 'e' pre_char_dict.setdefault('e', 'engel') print(pre_char_dict) # ^ {'a': 'apple', 'b': 'banana', 'c': 'candy', 'e': 'engel'} 키, 값 추가. pre_char_dict.setdefault('a', 'ant') # 키 a = apple 에서 ant 로 바뀔까? print(pre_char_dict) # ^ {'a': 'apple', 'b': 'banana', 'c': 'candy', 'e': 'engel'} 기존 값은 변화지 않는다. # dic setdefault set() add pre_char_dict.setdefault('f', set()) print(pre_char_dict) # ^ {'a': 'apple', 'b': 'banana', 'c': 'candy', 'e': 'engel', 'f': set()} pre_char_dict.setdefault('f', set()).add(5) print(pre_char_dict) # ^ {'a': 'apple', 'b': 'banana', 'c': 'candy', 'e': 'engel', 'f': {5}} pre_char_dict.setdefault('f', set()).add(10) print(pre_char_dict) # ^ {'a': 'apple', 'b': 'banana', 'c': 'candy', 'e': 'engel', 'f': {10, 5}} pre_char_dict.setdefault('f', set()).discard(5) print(pre_char_dict) # ^ {'a': 'apple', 'b': 'banana', 'c': 'candy', 'e': 'engel', 'f': {10}} | cs |
도움 받은 사이트 : https://dongdongfather.tistory.com/68
'programming > python' 카테고리의 다른 글
파이썬 딕셔너리 value + () (0) | 2019.06.11 |
---|---|
파이썬 getattr() 함수 (0) | 2019.06.05 |
파이썬 들여쓰기와 return (0) | 2019.06.04 |
파이썬 모듈 사용 (0) | 2019.05.16 |
miniconda 설치 후 conda 명령어 안 먹힐 때 (0) | 2019.05.14 |