dictionary

  • key와 value가 한 쌍
  • hash로 구현(대응 관계)
  1. Basic

    • key:value로 입력
    • 중괄호 사용

      1
      dic = {'a': 1, 'b': 2, 'c': 3}
    • 새로운 값을 삽입

      1
      2
      3
      dic['e'] = 4
      dic
      >> {'a': 1, 'b': 2, 'c': 3, 'e': 4}
    • 기존 값 변경이 가능

      1
      2
      3
      dic['a'] = 20
      dic
      >> {'a': 20, 'b': 2, 'c': 3, 'e': 4}
    • 변경이 불가능한 객체를 key로 사용

    • key 값은 변경이 가능한 객체로 사용 불가능(unhashable)
      1
      2
      3
      4
      5
      6
      dic[(1, 2, 3)] = 50
      dic
      >> {'a': 20, 'b': 2, 'c': 3, 'e': 4, (1, 2, 3): 50}

      dic[[5, 6, 'a']] = 60 # 변경이 가능한 객체를 키로 사용 불가능
      >> TypeError: unhashable type: 'list'
  2. 관련 함수들

    1
    dir(dic)
    1
    2
    # dictionary 예시
    dic = {'a' : 1, 'b' : 2, 'c' : 3}

    1) search 계열

    • get() : key로 value 얻기
    • key가 없는 값을 불러오면 에러가 발생하지만, get()을 사용하면 None을 반환

      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
      32
      33
      34
      35
      36
      37
      dic.get('c')
      >> 3

      print("dic.get('e') : ", dic.get('e'))
      >> dic.get('e') : None
      print("dic['e'] : ", dic['e'])
      >> KeyError: 'e'

      if dic.get('e'):
      print(dic['e'])
      else:
      print('No data') # dic.get('e') = None이므로 if문이 실행하지 않음
      >> No data

      try:
      print(dic['e'])
      except KeyError:
      print('No data') # try except문을 사용
      >> No data

      # key 값이 없을 경우, get(key, default_value)를 사용하여 default 값을 대신 가져옴
      dic.get('e', 2)
      >> 2

      # for문을 사용할 경우, key 값만 가져옴
      for i in dic:
      print(i, end = ' ')
      >> a b c

      # items()를 사용할 경우, key와 value 모두를 가져옴
      for pair in dic.items():
      print(pair, end = ' ') # tuple 형태
      >> ('a', 1) ('b', 2) ('c', 3)

      for key, value in dic.items():
      print(key, value, end = ' ') # tuple 형태로 가져오지 않음
      >> a 1 b 2 c 3

      2) delete 계열

    • pop() : 원하는 key의 value를 반환하고 삭제
    • popitems() : 임의의 key와 value를 반환하고 삭제

      1
      2
      3
      4
      5
      6
      7
      8
      9
      dic.pop('b')
      >> 2
      dic
      >> {'a': 1, 'c': 3}

      dic.popitem()
      >> ('c', 3)
      dic
      >> {'a': 1}

      3) insert 계열

    • update() : key가 있으면 원하는 value로 바꾸고 key가 없으면 추가
    • setdefault() : 원하는 key의 value를 찾아 반환

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      dic = {'a' : 1, 'b' : 2, 'c' : 3}

      dic.update({'b':40, 'd':50})
      dic
      >> {'a': 1, 'b': 40, 'c': 3, 'd': 50}

      # tuple을 사용하면 dictionary 안에서는 key와 value로 넣어줌
      c = (('e', 11), ('f', 12))
      dic.update(c)
      dic
      >> {'a': 1, 'b': 40, 'c': 3, 'd': 50, 'e': 11, 'f': 12}

      dic = {'a' : 1, 'b' : 2, 'c' : 3}

      dic.setdefault('b')
      >> 2

      # setdefault()는 key가 없을 경우, default 값으로 새로운 요소 추가
      dic.setdefault('e', 10)
      >> 10
      dic
      >> {'a': 1, 'b': 2, 'c': 3, 'e': 10}

      4) view 객체 사용

      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
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      dic = {'a' : 1, 'b' : 2, 'c' : 3}

      # keys()를 사용하여 key에 관한 view 객체 반환
      # list 형변환을 사용하여 list로 사용 가능
      key_view = dic.keys()
      key_view
      >> dict_keys(['a', 'b', 'c'])

      key_list = list(dic.keys())
      key_list
      >> ['a', 'b', 'c']

      # values()를 사용하여 value에 관한 view 객체 반환
      # list 형변환을 사용하여 list로 사용 가능
      value_view = dic.values()
      value_view
      >> dict_values([1, 2, 3])

      value_list = list(dic.values())
      value_list
      >> [1, 2, 3]

      # 요소 값을 추가할 경우, view 객체는 변경됨
      # list 형변환을 통해 대입해준 list 변수는 변하지 않음
      dic['d'] = 4

      key_view
      >> dict_keys(['a', 'b', 'c', 'd'])
      value_view
      >> dict_values([1, 2, 3, 4])

      key_list
      >> ['a', 'b', 'c']
      value_list
      >> [1, 2, 3]

      # list 형변환을 다시 해줘야 한다.
      list(dic.keys())
      >> ['a', 'b', 'c', 'd']

      # 대입해준 list는 여전히 변하지 않는다.
      key_list
      >> ['a', 'b', 'c']

      dic
      >> {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Share