ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩도장] day16. 딕셔너리 응용하기(2/2) - items(), keys(), values()
    IT/파이썬 2020. 9. 1. 00:49

    ■ 들어가기

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


    ▶ Unit25. 딕셔너리 응용하기

         - 25.1 딕셔너리 조작하기

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

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

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

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

     

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

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

    - for 반복문에 딕셔너리를 지정하여 출력하면 '키'만 출력됨

    - '값'을 출력하기 위해서는 딕셔너리.items() 를 사용

    - 사용법 :

    for 키, 값 in 딕셔너리.items() :

        코드

    >>> xxxxx>>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> for key, value in x.items() :
    print(key, value)


    a 10
    b 20
    c 30
    d 40

     

    2. 딕셔너리 "키"만 출력하기

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

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

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

    >>> x = {'a':10, 'b':20, 'c':30, 'd':40}
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> for key in x.keys() :   # "key" 만 가져옴
    print(key, end=' ')


    a b c d 

     

    3. 딕셔너리 "값"만 출력하기

    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> for values in x.values() :   # "values" 만 가져옴
    print(values, end=' ')


    10 20 30 40

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

    - 리스트와 같은 방식으로 딕셔너리 안에 for 반복문과 if 조건문으로 새로운 딕셔너리 생성 가능

    - 사용법

    {키:값 for 키, 값 in 딕셔너리}

    dict({키:값 for 키, 값 in 딕셔너리})

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

    - dict.fromkeys(keys) : 파이썬 딕셔너리 내장함수로써 dict.fromkeys(key) 와 같이 사용하며 key-value쌍의 새로운 딕셔너리를 생성함 (value는 지정하거나 지정하지 않을 수 있으며, 미지정 시 기본적으로 None 으로 생성함)

    여기서는 keys 리스트의 값을 key로 하여 새로운 딕셔너리 생성함 (value는 None)

    - dict.fromkeys(keys).itmes() : 파이썬 딕셔너리 내장함수 items()를 사용하여 생성된 딕셔너리의 키-값 쌍을 모두 가져옴

    - for key, value in dict.fromkeys(keys).items() : 키-값 쌍을 모두 가져와 key, value 변수에 하나 씩 담음

    - key:value for key, value in dict.fromkeys(keys).items() : for 반복문으로 생성된 key-value 쌍으로 딕셔너리 생성

     

    ※ 참고 - 딕셔너리 메서드

     

    1. 딕셔너리 표현식에서 if 조건문 사용하기

    - 키-값 쌍을 삭제하지 않고 삭제할 키-값 쌍을 제외하고 나머지 키-값 쌍으로 새로운 딕셔너리를 생성

    - 사용법

    {키:값 for 키, 값 in 딕셔너리 if 조건식}

    dict({키:값 for 키, 값 in 딕셔너리 if 조건식})

    >>> x
    {'a': None, 'b': None, 'c': None, 'd': None}
    >>> x = {'a':10, 'b':20, 'c':30, 'd':40}
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> y = {key:value for key, value in x.items() if value != 20}   # value가 20인 대상만 제외하고 새로 딕셔너리 생성
    >>> y
    {'a': 10, 'c': 30, 'd': 40}
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}  # 기존 딕셔너리 변경 없음

    >> 25.4 딕셔너리 안에서 딕셔너리 사용하기 (중첩 딕셔너리) <<

    - 딕셔너리 내 값 부분에 다시 딕셔너리를 반복하여 사용 가능

    - 계층형 데이터 저장 시 유용

    - 사용법

    딕셔너리 = {키1: {키A: 값A}, 키2: {키B: 값B}}

    소스 (dict_dict.py) 결과
    terrestrial_planet = {
        'Mercury' : {
            'mean_radius' : 2439.7,
            'mass' : 3.3022E+23,
            'orbital_period' : 87.969
            },
        'Venus' : {
            'mean_radius' : 6051.8,
            'mass' : 4.8676E+24,
            'orbital_period' : 224.70069
            },
        'Earth' : {
            'mean_radius' : 6371.0,
            'mass' : 5.97219E+24,
            'orbital_period' : 365.25641
            },
        'Mars' : {
            'mean_radius' : 3389.5,
            'mass' : 6.4185E+23,
            'orbital_period' : 686.9600
            }
        }

    print(terrestrial_planet['Venus']['mean_radius'])
    6051.8

    - 딕셔너리 안의 딕셔너리에 접근 시 [](대괄호)를 단계만큼 붙히고 '키'를 지정

    - 사용법

    딕셔너리[키][키]

    딕셔너리[키][키] = 값


    >> 25.5 딕셔너리의 할당과 복사 <<

    - 리스트와 마찬가지로 딕셔너리를 다른 변수에 할당하더라도 같은 객체를 가리킴 (y = x)

      └ 한 쪽의 값을 변경하면 다른 딕셔너리에 영향을 미침

    - 완전히 다른 객체를 만들기 위해서는 copy() 메서드 사용 (y = x.copy())

    >>> x = {'a':10, 'b':20, 'c':30, 'd':40}
    >>> x
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> y = x
    >>> y
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x['a'] = 99   # x 딕셔너리의 키 'a' 의 값을 변경
    >>> x
    {'a': 99, 'b': 20, 'c': 30, 'd': 40}
    >>> y   # 키 'a' 의 값 변경됨
    {'a': 99, 'b': 20, 'c': 30, 'd': 40}
    >>> z = x.copy()   # 기존 딕셔너리 복사
    >>> z
    {'a': 99, 'b': 20, 'c': 30, 'd': 40}
    >>> z['a'] = 10   # z 딕셔너리의 키 'a' 값 변경
    >>> z
    {'a': 10, 'b': 20, 'c': 30, 'd': 40}
    >>> x   # 복사 시 딕셔너리 간 영향 없음
    {'a': 99, 'b': 20, 'c': 30, 'd': 40}
    >>> y
    {'a': 99, 'b': 20, 'c': 30, 'd': 40}

     

    1. 중첩 딕셔너리의 할당과 복사 알아보기

    - 중첩 딕셔너리를 copy() 로 수행 시 일반 딕셔너리 '할당'과 동일함

    - copy 모듈의 deepcopy 함수 사용! (import 필요!)

      └ deepcopy 함수는 중첩된 딕셔너리에 들어있는 모든 딕셔너리를 복사한다!

    >>> x = {'a':{'python':'2.7'}, 'b':{'python':'3.6'}}
    >>> import copy    # copy 모듈을 가져옴
    >>> y = copy.deepcopy(x)
    >>> y
    {'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
    >>> y['a']['python'] = '2.7.15'
    >>> x
    {'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
    >>> y
    {'a': {'python': '2.7.15'}, 'b': {'python': '3.6'}}

     

    ● 요약

    1. 동일 딕셔너리를 가리키는 변수만 다른 딕셔너리를 "할당"으로!

    2. 요소가 동일한 완전히 다른 딕셔너리를 만들 때는 "복사"로!

    댓글

Designed by Tistory.