-
[코딩도장] 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''IT > 파이썬' 카테고리의 다른 글
[코딩도장] day17. 세트 사용하기(1/2) - set(), issubset(), issuperset(), isdisjoint() (0) 2020.09.01 [코딩도장] day16. 딕셔너리 응용하기(2/2) - items(), keys(), values() (0) 2020.09.01 [코딩도장] day14. 문자열 응용하기(2/2) (0) 2020.08.28 [코딩도장] day13. 문자열 응용하기(1/2) - 문자열 메서드(replace(), split(), join(), strip()) (0) 2020.08.27 [코딩도장] day12. 2차원 리스트 - 반복문으로 리스트 만들기 (0) 2020.08.24