일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- matplotlib
- Google Excel
- array
- Java
- Apache
- Kotlin
- Google Spreadsheet
- Python
- SQL
- PostgreSQL
- django
- Excel
- 파이썬
- Github
- google apps script
- PANDAS
- Redshift
- PySpark
- dataframe
- math
- GIT
- Mac
- c#
- numpy
- Tkinter
- hive
- string
- gas
- list
- Today
- Total
달나라 노트
Python Basic : get (dictionary에 존재하지 않는 key를 전달했을 때 발생하는 에러 해결. dictionary용 nvl) 본문
Python Basic : get (dictionary에 존재하지 않는 key를 전달했을 때 발생하는 에러 해결. dictionary용 nvl)
CosmosProject 2022. 1. 5. 22:51
dict_test = {
'a': 1,
'b': 2,
'c': 3,
}
sample_value = dict_test['d']
print(sample_value)
-- Result
KeyError: 'd'
위 코드를 실행시켜보면 KeyError가 발생합니다.
왜냐면 dict_test라는 dictionary에는 a, b, c라는 key가 존재하는데,
존재하지 않는 d라는 이름의 key를 전달했기 때문이죠.
위 예시에서처럼 간단한 dictionary를 사용하면 사실 KeyError가 발생할 일도 거의 없고, KeyError가 발생한다고 해도 금방 코드를 수정할 수 있습니다.
하지만 dictionary가 복잡해지고 경우에 따라 key의 종류가 변동될 수 있는 상황에서 dictionary의 key를 전달해야한다면 매번 KeyError가 발생할 때 마다 코드를 고쳐줘야 할 것입니다.
이러한 경우를 대비해서 dictionary에 존재하지 않는 key를 전달했을 때 어떤 값을 return해줄지 정할 수 있는 method가 있습니다.
바로 get method입니다.
dictionary.get(parameter_1, parameter_2)
get method는 위처럼 dictionary에 적용하여 사용할 수 있습니다.
get method는 첫 번째 인자인 parameter_1을 dictionary에 key로서 조회해보고,
만약 parameter_1이 dictionary에 존재하는 key라면 key=parameter_1인 value를 return해주며
만약 parameter_1이 dictionary에 존재하는 key가 아니라면 parameter_2를 return해줍니다.
dict_test = {
'a': 1,
'b': 2,
'c': 3,
}
sample_value = dict_test.get('d', 0)
print(sample_value)
-- Result
0
처음에 봤던 예시에 get method를 적용했습니다.
get method는 첫 번째 인자를 먼저 dictionary에서 key로 조회해보고 없으면 두 번째 인자를 반환합니다.
따라서 d는 dict_test에 없으니까 그 다음 인자인 0을 return한 겁니다.
dict_test = {
'a': 1,
'b': 2,
'c': 3,
}
sample_value = dict_test.get('b', 0)
print(sample_value)
-- Result
2
이번엔 get method에 b를 전달하였습니다.
b는 dict_test에 존재하는 key이므로 dict_test에서 key='b'인 value 즉, 2를 return합니다.
dict_test = {
'a': {
1: 10,
2: 20,
3: 30,
},
'b': {
4: 40,
5: 50,
6: 60,
}
}
sample_value_1 = dict_test.get('b', 0)
print(sample_value_1)
sample_value_2 = dict_test.get('d', 0)
print(sample_value_2)
-- Result
{4: 40, 5: 50, 6: 60}
0
dictionary 안에 dictionary가 있어도 get을 적용할 수 있습니다.
dict_test = {
'a': {
1: 10,
2: 20,
3: 30,
},
'b': {
4: 40,
5: 50,
6: 60,
}
}
sample_value_1 = dict_test['a'][1]
print(sample_value_1)
sample_value_2 = dict_test.get(['a'][1], 0)
print(sample_value_2)
-- Result
10
IndexError: list index out of range
- sample_value_1 = dict_test['a'][1]
보통 dictionary 안의 dictionary에 indexing을 하려면 sample_value_1에서 처럼 대괄호를 2번 연달아서 사용하면 됩니다.
이 경우 get method를 연달아 두 번 사용하는 것으로 대체할 수 있습니다.
아래 예시처럼 말이죠.
dict_test = {
'a': {
1: 10,
2: 20,
3: 30,
},
'b': {
4: 40,
5: 50,
6: 60,
}
}
sample_value_1 = dict_test.get('a', {}).get(1, 0)
print(sample_value_1)
sample_value_2 = dict_test.get('d', {}).get(1, 0)
print(sample_value_2)
-- Result
10
0
- sample_value_2 = dict_test.get('d', {}).get(1, 0)
첫 번째 get에서 인자를 ('d', {})로 적은 이유는
만약 dict_test의 key 중 d라는 key가 존재하지 않으면 {}를 return할 것이고 두 번째 get은 아무것도 없는 공백 dictionary {}에서 key = 1을 찾을 것입니다. 하지만 아무것도 없는 dictioanry이니 0을 반환하겠죠.
sample_value_2 = dict_test.get('d', 0).get(1, 0)
만약 위처럼 첫 번째 get에서 인자를 {}가 아닌 0으로 적어버리면
dict_test의 key중 d라는 key가 없을 경우 0을 return할 것이고,
0은 dictionary가 아니기 때문에 두 번째 get에서 error가 발생하게 됩니다.
따라서 가장 마지막으로 사용되는 get이 아니라면 두 번째 인자로 비어있는 dictionary {}를 적는 것이 좋습니다.
'Python > Python Basic' 카테고리의 다른 글
Python Basic : any, all (0) | 2022.01.20 |
---|---|
Python Basic : sorted method를 이용한 dictionary 정렬, dictionary 정렬하기 (0) | 2022.01.16 |
Python Basic : collection (list, dictionary, tuple, set) (0) | 2021.11.02 |
Python Basic : -*- coding: utf-8 -*- (Python encoding 변경해주기. Python encoding 설정. Python encoding utf-8) (0) | 2021.09.17 |
Python Basic : Crontab (Python code scheduler 주기적으로 Python 파일 돌리기) (0) | 2021.09.17 |