-
딕셔너리 만들기 기본
>>> 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