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 뿐 아니라 여러 자료형에 적용 가능하다고 합니다.
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Django] queryset을 합치면서 순서도 보존하는 방법 (2) | 2021.01.23 |
---|---|
[Django] BinaryField로부터 파일을 직접 서비스하면 안되는 이유 (0) | 2021.01.16 |
[Python] enum value로 @dataclass 사용하기 (0) | 2021.01.13 |
[Django] nullable 필드를 기본값 없는 non-nullable 필드로 변경할 때 유의사항 (0) | 2021.01.07 |
[Django] 마이그레이션할 때 Fixed DateTime Warning 해결방법 (0) | 2021.01.07 |