본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 25 정리(3) - 딕셔너리 표현식 사용

by chanfficial 2022. 2. 3.

3. 딕셔너리 표현식 사용하기

  • 리스트와 마찬가지로 딕셔너리도 for 반복문과 if 조건문을 사용하여 딕셔너리를 생성할 수 있다.
    {키: 값 for 키, 값 in 딕셔너리}
    dict({키: 값 for 키, 값 in 딕셔너리})​
    - 이처럼 딕셔너리 안에 키와 값, for 반복문을 지정하면 된다.
  • >>> 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}​
  • 딕셔너리 표현식을 사용할 때는 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로 삭제하는 방식을 떠올릴 수 있다.
    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​
    - 이때 반복 도중에 딕셔너리의 크기가 바뀌었다는 에러가 발생한다. 즉, 딕셔너리는 for 반복문으로 반복하면서 키-값 쌍을 삭제하면 안된다.
  • 특정 값을 찾아서 키-값 쌍을 삭제하려면 딕셔너리의 표현식에서 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이 아닌 키-값 쌍으로 다시 딕셔너리를 만드는데, 이는 직접 키-값 쌍을 삭제하는 방식이 아니라 삭제할 키-값 쌍을 제외하고 남은 키-값 쌍으로 딕셔너리를 새로 만드는 것이다.

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