ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 딕셔너리 응용
    Python 2023. 10. 10. 17:27
    딕셔너리 만들기 기본
    >>> d1 = dict( name='cat', age=3 )
    >>> print(d1)
    {'name': 'cat', 'age': 3}
    >>>
    >>> d2 = dict( zip(['name', 'age'], ['cat', 3]) )
    >>> print(d2)
    {'name': 'cat', 'age': 3}
    >>>
    >>> d3 = dict( [('name', 'cat'), ('age', 3)] )
    >>> print(d3)
    {'name': 'cat', 'age': 3}
    >>>
    >>> d4 = dict( {'name':'cat', 'age':3} )
    >>> print(d4)
    {'name': 'cat', 'age': 3}

     

    딕셔너리 응용
    >>> # 딕셔너리에 키-값 쌍 추가, 기본값 저장
    >>> x = {'a':10, 'b':20, 'c':30, 'd':40}
    >>> x.setdefault('e')    # 키만 입력
    >>> 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}

    제대로 추가가 되었을 시 입력한 값 반환

    >>> # 딕셔너리에서 키 값 수정
    >>> x={'a':10, 'b':20, 'c':30, 'd':40}
    >>> x.update(a = 90)
    >>> x
    {'a': 90, 'b': 20, 'c': 30, 'd': 40}
    >>> x.update('a' = 90)    # 따옴표 등을 붙이면 에러
      File "<stdin>", line 1
        x.update('a' = 90)    # 따옴표 등을 붙이면 에러
                 ^^^^^
    SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
    >>> x.update(e = 50)
    >>> x
    {'a': 90, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
    >>>
    >>> x.update(a=900, f=60)
    >>> x
    {'a': 900, 'b': 20, 'c': 30, 'd': 40, 'e': 50, 'f': 60}
    >>> y = {1:'one', 2:'two'}
    >>> y.update( {1:'ONE', 3:'THREE'} )
    >>> y
    {1: 'ONE', 2: 'two', 3: 'THREE'}
    >>> y.update(4='FOUR')    # 키가 숫자일 경우 딕셔너리 형태가 아니면 에러
      File "<stdin>", line 1
        y.update(4='FOUR')
                 ^^
    SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
    >>> y.update(four = 4)
    >>> y
    {1: 'ONE', 2: 'two', 3: 'THREE', 'four': 4}
    >>>
    >>> y = {1:'one', 2:'two'}
    >>> y.update( {1:'ONE', 3:'THREE'} )
    >>>
    >>> y.update( [[2, 'TWO'], [4, 'FOUR']] )
    >>> 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'}
    >>> # 딕셔너리에서 키-값 쌍 삭제
    >>> x={'a':10, 'b':20, 'c':30, 'd':40}
    >>> x.pop('a')
    10
    >>> x
    {'b': 20, 'c': 30, 'd': 40}
    >>>
    >>> x.pop()    # 순서가 없으므로 키를 입력하지 않으면 에러
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: pop expected at least 1 argument, got 0
    >>> x.pop('z', 100)
    100
    >>> x
    {'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}
    >>>
    >>> x={'a':10, 'b':20, 'c':30, 'd':40}
    >>> x.pop('a')    # 키가 'a'인 키-값 쌍 삭제
    10
    >>> x
    {'b': 20, 'c': 30, 'd': 40}
    >>> x.popitem()   # 마지막 키-값 쌍 삭제
    ('d', 40)         # 튜플 형태로 반환
    >>> x
    {'b': 20, 'c': 30}

    키가 a인 쌍이 여러 개일 때

    >>> x={'a':10, 'a':10.0, 'b':20, 'c':30, 'd':40}
    >>> x.pop('a')    # 키가 'a'인 키-값 쌍 삭제
    10.0
    >>> x
    {'b': 20, 'c': 30, 'd': 40}

    제일 앞에 있는 것만 삭제되는 것이 아닌 두 개 모두 삭제됨

    >>> # 딕셔너리의 모든 키-값 쌍 삭제
    >>> x={'a':10, 'b':20, 'c':30, 'd':40}
    >>> x.clear()
    >>> x
    {}
    >>> # 딕셔너리에서 키의 값 가져오기
    >>> x={'a':10, 'b':20, 'c':30, 'd':40}
    >>> x.get('a')
    10
    >>> x.get('z')
    >>> x.get('z', 100)
    100
    >>>
    >>> # 딕셔너리에서 키-값 쌍 모두 가져오기
    >>> 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])

     

    >>> # 리스트와 튜플로 딕셔너리 만들기
    >>> keys = ['name', 'age', 'location']
    >>> x = dict.fromkeys(keys)
    >>> x
    {'name': None, 'age': None, 'location': None}
    >>> y = dict.fromkeys(keys, 'cat')
    >>> y
    {'name': 'cat', 'age': 'cat', 'location': 'cat'}
    >>>

     

    >>> # 반복문으로 딕셔너리의 키-값 쌍을 모두 출력
    >>> x={'a':10, 'b':20, 'c':30, 'd':40}
    >>> for i in x:
    ...     print(i, end=' ')
    ...
    a b c d >>>
    >>>
    >>> 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
    >>> for i in x.items():
    ...     print(i)
    ...
    ('a', 10)
    ('b', 20)
    ('c', 30)
    ('d', 40)
    >>> for i in x.keys():      # 키만 출력
    ...     print(i)
    ...
    a
    b
    c
    d
    >>> for i in x.values():    # 값만 출력
    ...     print(i)
    ...
    10
    20
    30
    40

     

    딕셔너리 표현식 사용
    >>> # 딕셔너리 표현식
    >>> 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}
    >>>
    >>> y = dict.fromkeys(keys)
    >>> y
    {'a': None, 'b': None, 'c': None, 'd': None}
    >>>
    >>> # 딕셔너리 표현식에서 if 조건문 사용
    >>> x = {'a':10, 'b':20, 'c':30, 'd':40}
    >>> for k, v in x.item():
    ...     if v == 20:
    ...         del x[k]
    ...
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'dict' object has no attribute 'item'. Did you mean: 'items'?
    >>>
    >>> x = {'a':10, 'b':20, 'c':30, 'd':40}
    >>> x = {key: value for key, value in x.items() if value != 20}
    >>> x
    {'a': 10, 'c': 30, 'd': 40}
    >>>
    >>> # 딕셔너리 안에서 딕셔너리 사용
    >>> 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

     

    >>> # 딕셔너리의 할당, 복사
    >>> x = {'a': 0, 'b': 0, 'c': 0, 'd': 0}
    >>> y = x
    >>>
    >>> print(x is y)
    >>> True
    >>>
    >>> y['a'] = 99
    >>> print(x)
    >>> {'a': 99, 'b': 0, 'c': 0, 'd': 0}
    >>> print(y)
    >>>{'a': 99, 'b': 0, 'c': 0, 'd': 0}
    >>>
    >>> x = {'a': 0, 'b': 0, 'c': 0, 'd': 0}
    >>> y = x.copy()
    >>>
    >>> print(x is y)
    >>> False
    >>> print(x == y)
    >>> True

     

    x = {    'a': {'python': '2.7'},
             'b': {'python': '3.6'}    }
    y = x.copy()
    y['a']['python'] = '2.7.15'
    print(x)
    print(y)
    print()
    
    # 중첩 딕셔너리를 완전히 복사 deepcopy() 사용
    import copy
    x = {    'a': {'python': '2.7'},
             'b': {'python': '3.6'}    }
    y = copy.deepcopy(x)
    y['a']['python'] = '2.7.15'
    print(x)
    print(y)

     

    연습 문제 예제

    # 25.7번 연습 문제: 평균 점수 구하기
    
    # 코드
    maria = {'korean':94, 'english':91, 'mathmatics':89, 'science':83}
    average = sum(maria.values()) / len(maria)
    print(average)
    
    # 실행 결과
    89.25
    
    # 25.8번 심사 문제: 딕셔너리에서 특정 값 삭제하기
    # 표준 입력으로 문자열 여러 개와 숫자 여러 개가 두 줄로 입력되고
    # 첫 번째 줄은 키, 두 번째 줄은 값으로 하여 딕셔너리 생성
    # 딕셔너리에서 키가 'delta'인 키-값 쌍과 값이 30인 키-값 쌍을 삭제하도록 만드세요
    
    # 코드
    keys = input().split()
    values = map(int, input().split())
    
    x = dict(zip(keys, values))
    
    x = {key: value for key, value in x.items() if key != 'delta' and value != 30}
    
    print(x)
    
    # 실행 결과 - 예제 1
    alpha bravo charlie delta    # 입력 값
    10 20 30 40                  # 입력 값
    {'alpha': 10, 'bravo': 20}   # 출력 값
    
    # 실행 결과 - 예제 2
    alpha bravo charlie delta echo foxtrot golf    # 입력 값
    30 40 50 60 70 80 90                           # 입력 값 
    {'bravo': 40, 'charlie': 50, 'echo': 70, 'foxtrot': 80, 'golf': 90}    # 출력 값

    'Python' 카테고리의 다른 글

    file  (0) 2023.10.11
    set  (0) 2023.10.11
    문자열 응용  (0) 2023.10.10
    2차원 리스트 사용하기  (0) 2023.10.04
    리스트와 튜플 응용  (0) 2023.10.04
Designed by Tistory.