일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- datetime
- 큰 수 나누기
- ceil
- BOJ
- 외래키
- lower_case_table_names
- 리스트 컴프리헨션
- itertools
- mysql
- enumerate
- Codeforces
- python
- FOREIGN KEY
- 자료구조
- 파이썬
- 에라토스테네스의 체
- SUM()
- project euler
- SUM
- list comprehension
- 세그먼트 트리
- flask
- 소수
- timestamp
- 네이밍
- 2557
- Dictionary
- 딕셔너리
- floor
- convention
Archives
- Today
- Total
늒네 기록
[python] dictionary, get 함수와 이것저것 본문
파이썬에서 딕셔너리를 다룰 때 종종 마주칠 수 있는 상황.
x = {}
for i in range(5):
x[i] = i*i
# x = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
for i in range(10):
print(f'x[{i}] = {x[i]}')
#x[0] = 0
#x[1] = 1
#x[2] = 4
#x[3] = 9
#x[4] = 16
#Traceback (most recent call last):
# File "cf.py", line 8, in <module>
# print(f'x[{i}] = {x[i]}')
#KeyError: 5
x 안에 없는 키(위의 경우, 5)를 가지고 불러오려고 하는 경우, KeyError가 발생하며 돌던 것이 죽어버린다.
그렇다면, 처음부터 안에 들어있는 key들만 가지고 와서 출력하면 되는 것이 아닐까?
x = {}
for i in range(5):
x[i] = i*i
# x = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
for k in x.keys(): # 혹은, x.keys() 대신 x만 써도 똑같이 작동한다.
print(f'x[{k}] = {x[k]}')
#x[0] = 0
#x[1] = 1
#x[2] = 4
#x[3] = 9
#x[4] = 16
물론 이렇게 안에 있는 key들만 가지고 작업할 일만 있다면 참 좋겠지만, 그런 상황만 있는 것이 아니다. 그렇다면, key 에러가 나기 전에 넣어보려는 key가 x.keys() 안에 있는지 판별하면 되는 것이 아닐까?
x = {}
for i in range(5):
x[i] = i*i
# x = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
for i in range(10):
if i in x.keys(): print(f'x[{i}] = {x[i]}')
else: print(f'key "{i}" not in x')
#x[0] = 0
#x[1] = 1
#x[2] = 4
#x[3] = 9
#x[4] = 16
#key "5" not in x
#key "6" not in x
#key "7" not in x
#key "8" not in x
#key "9" not in x
이렇게 하면 작동이야 하겠지만, 'if i in x.keys()'로 i가 x 안에 들어있는지 계속 판별을 해주어야 한다.
이와 같은 번거로움을 한 번에 해결해주는 것이 get(x, default) 함수이다.
x = {'hello':1}
print(x.get('hello')) # 1
print(x.get('world')) # None
print(x.get('world', 'doesn\'t exist')) # doesn't exist
get 함수는 get(받아오고싶은 키값, 키가 없을때 리턴할 디폴트 값)의 두 인수를 받을 수 있게 되어있고, 두 번째 인수를 비워두면 자동으로 None을 리턴하게 되어있다. 예를 들어, 이렇게 구현되어 있다고 생각하면 된다.
def get_mimic(x, key, default=None):
return x[key] if key in x.keys() else default
x = {'hello':1}
print(get_mimic(x,'hello')) # 1
print(get_mimic(x,'world')) # None
print(get_mimic(x,'world', 'doesn\'t exist')) # doesn't exist
반응형
'언어 공부 기록 > python' 카테고리의 다른 글
[python] list comprehension - 2 (0) | 2020.09.12 |
---|---|
[python] string을 list()하면 어떻게 될까? (0) | 2020.09.11 |
[python] dictionary, get 함수 활용법 1 (0) | 2020.09.09 |
[python] list comprehension - 1 (0) | 2020.09.08 |
[python] 나누기에 대하여, // vs / (0) | 2020.05.15 |
Comments