dict 값을 복사하면서 특정 필드를 제외(exclude)하고 싶으면 크게 두가지 방법이 있습니다.

  • 1. items() 활용
  • 2. keys() 활용

각각 예제를 써보면 아래와 같습니다

# 1.
new_dict = {k: v for k, v in old_dict.items() if k not in {'key1', 'key2'}}

# 2.
new_dict = {k: old_dict[k] for k in old_dict.keys() - {'key1', 'key2'}}

비슷해보이는데, 2번처럼 keys()를 사용할 때 더 느리다고 합니다.

 

CPython 코어 개발자가 테스트 해봤을 때 33%까지 느리다고 한 걸 보면 맞겠죠 뭐 (링크)

느린 이유는 제외할 모든 키가 old_dict에 한번씩 접근해서? 그런 것이라고 하네요

 

funcy.omit(old_dict, 'key1', 'key2')

funcy라는 모듈의 omit을 활용하는 것도 좋다고 합니다. 잘 테스트되어 있고 dict 뿐 아니라 여러 자료형에 적용 가능하다고 합니다.

반응형