TIL
[TIL] 230404 [Python] dictionary 의 key 인식
생각하는 코댕이
2023. 4. 4. 15:25
728x90
TIL 학습목표
- dictionary의 key 인식 과정을 이해한다.
- dict['key'] 와 dict['item'] 의 차이와 올바른 사용법을 이해한다. (feat.pylint)
1) 문제점 (Problem)
팀원들과 페어프로그래밍을 하다가 다음과 같은 코드를 리뷰하였다.
# 딕셔너리가 item을 입력해도 key값으로 인식하는 비문()이슈 발생
for num in count_dict: # for i in 딕셔너리 --> 이런 for문을 쓰면 i가 딕셔너리의 키값과 동일한 자료형을 갖게 됩니다.
if count_dict[num] == max_count:
mode_list.append(num)
print(num)
위 코드에서 num 은 count_dict 이라는 딕셔너리의 아이템(요소) 이고, key : value 와 같이 하나의 쌍을 이룬다.
그런데 count_dict[num] 에서 num에 key 값이 아닌 item에 들어갔는데도, 코드의 결과는 key 값을 넣었을 때와 동일했다.
그 이유를 알아보자.
2) 시도해본 것들 (Try)
▶팀원들과 추측해보기
먼저 pylint의 warning을 보자.
*pylint : vscode의 확장으로, 코드상의 warning을 알려준다.
< 생각해보기 >
# dict_[key] = value | # 키를 입력 → 값을 출력 *동일한 결과
# dict_[item] = value | # 요소를 입력 → 값을 출력 *동일한 결과
# dict_[key:value] = value | # 동일한결과 ▶▶▶ 요소를 키로 인식한것인가?!
▶답해줘 GPT!
# for i in 딕셔너리 --> 이런 for문을 쓰면 i가 딕셔너리의 키값과 동일한 자료형을 갖게 됩니다.
GPT의 의견과 팀원들과 했던 추측으로 미루어 보아 비문이지만, python의 유연성으로 넘어가는 부분이라 결론을 지었다!
+ 튜터님께 문의한 결과, 비문이지만 파이썬이 추측하여 유연하게 넘어간 것이라고 한다.
하지만, 버젼에 따라 동작하지 않을 수도 있는 '비문' 이므로 key값을 입력하는 양식을 지켜주는 것이 좋다!
3) 해결 (Solution)
팀원들과 추측 + GPT + 튜터님
비문이지만 python의 직관성과 유연성이 적용된 예쁘지는 않지만 굴러가는 코드 라는 헤프닝이었다.
하지만 코드를 정확히 이해하고 사용해야함을 다시금 시사하는 경험이었다.
4) 알게 된 점 (Learnd)
결과를 알게된 점도 물론 좋았지만, 팀원들과 원인에 대해 스터디를 한 경험도 유익했다.
js에서는 console.log 였다면, python에서는 print() 라는 말 처럼 테스트 과정에서 단계별로 print를 하며 값과 타입을 확인하는 것도 좋은 경험이었다.
내가 짠 코드에 대한 메타인지 부분도 챙겨보도록 하자!
728x90