파이썬_딕셔너리___missing___메서드에_관하여.

파이썬 딕셔너리 missing 메서드에 관하여

  • 파이썬 딕셔너리를 사용할 때 찾는 key값이 없는 경우 다음과 같은 에러가 발생한다.
1
2
3
4
5
mine2 = dict()
mine2["dog"] = ["Na", "Mg"]
print(mine2["cat"])

### print >> KeyError: 'cat'
  • 이러한 KeyError 를 딕셔너리를 상속받는 자기만의 딕셔너리 클래스를 만들어서 해결할 수 있는 방법이 있다.

    • missing 메서드는 딕셔너리의 key 값을 찾고싶다는 입력을 보냈을 때 키 값이 존재하지 않을 경우 어떤 값을 return 할까를 작성할 수 있다. (정확히는 getitem 에서 key가 없을 경우 정의된 missing 을 호출한다.)

    • 다음과 같은 나만의 딕셔너리를 만들어보자.

      1
      2
      3
      class mydict(dict):
      def __missing__(self, key):
      return []
    • 딕셔너리를 상속받은 나의 mydict에 다음과 같은 데이터를 넣어보자.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      mine = mydict()

      mine["dog"] = ["H"]
      mine["tiger"] = ["He, Li"]
      mine["wolf"] = ["Be", "B", "C"]

      print(mine)

      ### print >> {'dog': ['H'], 'tiger': ['He, Li'], 'wolf': ['Be', 'B', 'C']}
    • 위와 같은 mine 딕셔너리에서 처음과 같이 “cat” 을 찾으려고 한다면 어떻게 될까?

      1
      2
      3
      print(mine["cat"])

      ### print >> []
    • KeyError 가 발생하지 않았다. 왜냐하면 나만의 딕셔너리에 정의한 missing 메서드를 통해 key값이 없다면 빈 리스트를 return하게 만들었기 때문이다!

    • 이를 이용하면 다음과 같이 데이터를 다룰 수도 있다.

      1
      2
      3
      4
      5
      mine["cat"] += ["N", "O", "F", "Ne"]

      print(mine)

      ### print >> {'dog': ['H'], 'tiger': ['He, Li'], 'wolf': ['Be', 'B', 'C'], 'cat': ['N', 'O', 'F', 'Ne']}
    • 그냥 처음과 같이 데이터를 입력하면 되는것이 아닌가? 라고 생각할 수 있지만 큐나 스텍을 이용해 순차적으로 모든 데이터를 순회하는 경우에는 이와같은 방법이 유용하게 쓰일 수 있다.

#

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×