ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩도장] day15. 딕셔너리 응용하기(1/2) - setdefault(), update(), pop(), popitem()
    IT/파이썬 2020. 8. 30. 00:28

    ■ 들어가기

    - 파이썬 코딩 도장 (남재윤/길벗). 을 공부하며 정리하는 블로그


    ▶ Unit25. 딕셔너리 응용하기

         - 25.1 딕셔너리 조작하기

         - 25.2 반복문으로 딕셔너리의 카-값 쌍을 모두 출력하기

         - 25.3 딕셔너리 표현식 사용하기

         - 25.4 딕셔너리 안에서 딕셔너리 사용하기

         - 25.5 딕셔너리의 할당과 복사

     

    >> 25.1 딕셔너리 조작하기 <<

    1. 딕셔너리에 키-값 쌍 추가하기

    - setdefault : 키-값 쌍 추가 (이미 들어있는 키의 값은 수정 불가)

      update : 키의 값 수정, 키가 없으면 키-값 쌍 추가

     

    2. 딕셔너리에 키와 기본값 저장하기

    - setdefault(키) : 딕셔너리에 키-값 쌍을 추가

    - '키'만 지정 시, '값'은 None을 저장

    >>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x.setdefault('e')
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None}

    - setdefault(키, 기본값) : 값에 기본값을 저장한 뒤 해당 값을 return

    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None}
    >>> x.setdefault('f', 100)
    100
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None, 'f': 100}

     

    3. 딕셔너리에서 키의 값 수정하기

    - update(키=값) : 딕셔너리에서 키의 값을 수정

      ( 기존 딕셔너리의 키에서 작은따옴표 또는 큰따옴표를 빼고 키 이름과 값을 지정한다, 그렇지 않으면 에러 )

    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None, 'f': 100}
    >>> x.update(e=50)
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50, 'f': 100}
    >>> x.update('e'=60)
    SyntaxError: keyword can't be an expression

    - 만일 딕셔너리에 키가 없으면 새로 키-값 쌍을 추가

    >>> x.update(g=300)
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50, 'f': 100, 'g': 300}

    - 키-값 쌍 여러 개를 콤마로 구분하여 넣어주면 값을 한 번에 수정 가능

      ( 단, 키가 있으면 해당 키의 값을 수정하고 없으면 키-값 쌍을 추가 )

    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50, 'f': 100, 'g': 300}
    >>> x.update(f=60, g=70)
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50, 'f': 60, 'g': 70}

    - update(키=값) 은 키가 "문자열" 인 경우만 가능

    - 키가 "숫자" 인 경우 딕셔너리를 넣어서 수정

      ( 이때도 키가 존재할 때만 수정가능하며, 미존재 시 새로 추가됨 )

    - 사용법 : update(딕셔너리)

    >>> y = {1: 'one', 2: 'two'}
    >>> y
    {1: 'one', 2: 'two'}
    >>> y.update({1:'ONE', 3: 'THREE'})
    >>> y
    {1: 'ONE', 2: 'two', 3: 'THREE'}

    - 리스트와 튜플을 이용하여 수정 가능

    - 사용법 : update(리스트), update(튜플)

      리스트 : [[키1, 값1], [키2, 값2]]

      튜플 : ((키1, 값1), (키2, 값2))

    >>> y
    {1: 'ONE', 2: 'two', 3: 'THREE'}
    >>> y.update([[2, 'TWO'], [4, 'FOUR']])
    >>> y
    {1: 'ONE', 2: 'TWO', 3: 'THREE', 4: 'FOUR'}

    - zip 객체로 키 리스트와 값 리스트를 묶어서 수정 가능

    >>> y
    {1: 'ONE', 2: 'TWO', 3: 'THREE', 4: 'FOUR'}
    >>> y.update(zip([1, 2], ['one', 'two']))
    >>> y
    {1: 'one', 2: 'two', 3: 'THREE', 4: 'FOUR'}

     

    4. 딕셔너리에서 키-값 쌍 삭제하기

    - pop(키) : 딕셔너리에서 특정 키-값 쌍을 삭제한 뒤 삭제한 값을 return

    >>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x.pop('a')
    10
    >>> x
    {'b': 20, 'c': 30, 'd': 40}

    - pop(키, 기본값) :

      딕셔너리에 키가 있을 때는 해당 키-값 쌍을 삭제한 뒤 삭제한 값을 return

                     키가 없을 때는 기본값만 return (삭제 없음)

    >>> x
    {'b': 20, 'c': 30, 'd': 40}
    >>> x.pop('z', 0)
    0
    >>> x
    {'b': 20, 'c': 30, 'd': 40}

    - pop 대신 del 로 특정 키-값 쌍 삭제 가능

    - 사용법 : del 딕셔너리[키]

    >>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> del x['a']
    >>> x
    {'b': 20, 'c': 30, 'd': 40}

     

    5. 딕셔너리에서 임의의 키-값  쌍 삭제하기

    - popitem() :

      파이썬 3.5 이하 : 딕셔너리에서 임의의 키-값 쌍을 삭제한 뒤 삭제한 키-값 쌍을 튜플로 return

      (매번 삭제하는 키-값 쌍이 상이함)

      파이썬 3.6 이상 : 딕셔너리에서 마지막 키-값 쌍을 삭제한 뒤 삭제한 키-값 쌍을 튜플로 return

    >>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x.popitem()
    ('d', 40)
    >>> x
    {'a': 10, 'b': 20, 'c': 30}

     

    6. 딕셔너리의 모든 키-값 쌍을 삭제하기

    - clear() : 딕셔너리의 모든 키-값 쌍을 삭제 => 빈 딕셔너리 {} 가 됨

    >>> x
    {'a': 10, 'b': 20, 'c': 30}
    >>> x.clear()
    >>> x
    {}

     

    7. 딕셔너리에서 키의 값을 가져오기

    - get(키) : 딕셔너리에서 특정 키의 값을 가져옴

    >>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x.get('a')
    10

    - get(키, 기본값) :

      딕셔너리에 키가 있을 때는 해당 키의 값을 return

                     키가 없을 때는 기본값을 return

    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x.get('z', 0)
    0
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}

     

    8. 딕셔너리에서 키-값 쌍을 모두 가져오기

    - items() : 키-값 쌍을 모두 가져옴

    - keys() : 키를 모두 가져옴

    - values() : 값을 모두 가져옴

    => 보통 for 반복문과 조합하여 사용

    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x.items()
    dict_items([('a', 10), ('b', 20), ('c', 30), ('d', 40)])
    >>> x.keys()
    dict_keys(['a', 'b', 'c', 'd'])
    >>> x.values()
    dict_values([10, 20, 30, 40])

     

    9. 리스트와 튜플로 딕셔너리 만들기

    1) 키가 들어있는 키 리스트 생성

    2) dict.fromkeys(키 리스트) 로 딕셔너리 생성

       => 값은 모두 None 으로 저장

    >>> keys = ['a', 'b', 'c', 'd']
    >>> keys
    ['a', 'b', 'c', 'd']
    >>> x = dict.fromkeys(keys)
    >>> x
    {'a': None, 'b': None, 'c': None, 'd': None}

    2') dict.fromkeys(키 리스트, 값) : 해당 값이 키의 값으로 저장됨

    >>> keys = ['a', 'b', 'c', 'd']
    >>> y = dict.fromkeys(keys, 100)
    >>> y
    {'a': 100, 'b': 100, 'c': 100, 'd': 100}

    ※ 참고

    - 딕셔너리에서 없는 키에 접근 시 에러 발생

    >>> y
    {'a': 100, 'b': 100, 'c': 100, 'd': 100}
    >>> y['a']
    100
    >>> y['z']
    Traceback (most recent call last):
      File "<pyshell#150>", line 1, in <module>
        y['z']
    KeyError: 'z'

    - defaultdict(기본값 생성함수) : 없는 키에 접근하더라도 에러 없이 기본값을 return

    - defaultdict은 collections 모듈에 있음

    >>> from collections import defaultdict  # collections 모듈에서 defaultdict를 가져옴
    >>> y = defaultdict(int)  # int 로 기본값 생성
    >>> y
    defaultdict(<class 'int'>, {})
    >>> y['z']
    0
    >>> int()  # 자료형 int는 기본값이 0임
    0
    >>> str()  # 자료형 str은 기본값이 ''임
    ''
    >>> z = defaultdict(str)
    >>> z
    defaultdict(<class 'str'>, {})
    >>> z['z']
    ''

    - 만일 기본값 0(int), ''(str)이 아닌 다른 값을 기본값으로 설정 시 lambda 사용

    >>> a = defaultdict(lambda: 1)
    >>> a['a']
    1
    >>> b = defaultdict(lambda: 'python')
    >>> b['a']
    'python'

     

    댓글

Designed by Tistory.