3. 딕셔너리 표현식 사용하기
- 리스트와 마찬가지로 딕셔너리도 for 반복문과 if 조건문을 사용하여 딕셔너리를 생성할 수 있다.
- 이처럼 딕셔너리 안에 키와 값, for 반복문을 지정하면 된다.{키: 값 for 키, 값 in 딕셔너리} dict({키: 값 for 키, 값 in 딕셔너리})
- 'a', 'b', 'c', 'd'] x = {key: value for key, value in dict.fromkeys(keys).items()} x {'a': None, 'b': None, 'c': None, 'd': None} keys = [
- 딕셔너리 표현식을 사용할 때는 for in 다음에 딕셔너리를 지정하고 items를 사용한다.
- 키, 값을 가져온 뒤에는 키: 값 형식으로 변수나 값을 배치하여 딕셔너리를 생성하면 된다.
x = {key: value for key, value in dict.fromkeys(keys).items()}
- 즉, dict.fromkeys(keys).items() 로 키-값 쌍을 구한 뒤 키는 변수 key, 값은 변수 value에 꺼내고 최종적으로 key와 value를 이용하여 딕셔너리를 만든다.
딕셔너리 표현식의 동작 순서 - 물론 다음과 같이 keys로 키만 가져온 뒤 특정 값을 넣거나, values로 값을 가져온 뒤 값을 키로 사용할 수도 있다.
>>> {key: 0 for key in dict.fromkeys(['a', 'b', 'c', 'd']).keys()} # 키만 가져옴 {'a': 0, 'b': 0, 'c': 0, 'd': 0} >>> {value: 0 for value in {'a': 10, 'b': 20, 'c': 30, 'd': 40}.values()} # 값을 키로 사용 {10: 0, 20: 0, 30: 0, 40: 0}
- 또는, 키와 값의 자리를 바꾸는 등 여러 가지로 응용할 수 있다.
>>> {value: key for key, value in {'a': 10, 'b': 20, 'c': 30, 'd': 40}.items()} # 키-값 자리를 바꿈 {10: 'a', 20: 'b', 30: 'c', 40: 'd'}
3-1. 딕셔너리 표현식에서 if 조건문 사용하기
- 딕셔너리 표현식은 dict.fromkeys 함수만 사용한 결과와 큰 차이점이 없고 복잡하지만, 딕셔너리에서 특정 값을 찾아서 삭제할 때 유용하다.
- 딕셔너리는 특정 키를 삭제하는 pop 메서드만 제공할 뿐 특정 값을 삭제하는 메서드는 제공하지 않기 때문에 특정 값을 찾아서 키-값 쌍을 삭제하려면 for 반복문으로 반복하면서 del로 삭제하는 방식을 떠올릴 수 있다.
- 이때 반복 도중에 딕셔너리의 크기가 바뀌었다는 에러가 발생한다. 즉, 딕셔너리는 for 반복문으로 반복하면서 키-값 쌍을 삭제하면 안된다.x = {'a': 10, 'b': 20, 'c': 30, 'd': 40} for key, value in x.items(): if value == 20: # 값이 20이면 del x[key] # 키-값 쌍 삭제 print(x) # 실행 결과 Traceback (most recent call last): File "C:\project\dict_del_by_value_error.py", line 3, in <module> for key, value in x.items(): RuntimeError: dictionary changed size during iteration
- 특정 값을 찾아서 키-값 쌍을 삭제하려면 딕셔너리의 표현식에서 if 조건문을 사용하여 삭제할 값을 제외하면 된다.
{키: 값 for 키, 값 in 딕셔너리 if 조건식} dict({키: 값 for 키, 값 in 딕셔너리 if 조건식})
>>> 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}
- 딕셔너리 표현식에서 if value != 20 과 같이 if 조건문을 지정하면 값이 20이 아닌 키-값 쌍으로 다시 딕셔너리를 만드는데, 이는 직접 키-값 쌍을 삭제하는 방식이 아니라 삭제할 키-값 쌍을 제외하고 남은 키-값 쌍으로 딕셔너리를 새로 만드는 것이다.
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩 도장 Unit 26 정리(1) - 세트 만들기 (0) | 2022.02.07 |
---|---|
파이썬 코딩도장 Unit 25 정리(4) - 중첩 딕셔너리, 딕셔너리의 할당과 복사 (0) | 2022.02.04 |
파이썬 코딩도장 Unit 25 정리(2) - 반복문으로 딕셔너리의 키-값 쌍을 모두 출력 (0) | 2022.02.02 |
파이썬 코딩도장 Unit 25 정리(1) - 딕셔너리 조작 (0) | 2022.02.01 |
파이썬 코딩도장 Unit 24 정리(2) - 문자열 서식 지정자, 포매팅 사용 (0) | 2022.01.29 |