05의 개발 계발

[TIL] 230404 [Python] dictionary 의 key 인식 본문

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)

위 코드에서 numcount_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