Python에서 Defaultdict를 언제 어떻게 사용해야 합니까?
게시 됨: 2022-10-06이 자습서에서는 Python 사전으로 작업할 때 KeyError를 더 잘 처리하기 위해 Python 컬렉션 모듈의 defaultdict 를 사용하는 방법을 배웁니다.
Python에서 사전은 키-값 쌍으로 데이터를 저장하는 강력한 내장 데이터 구조입니다. 키를 사용하여 사전을 탭하고 값에 액세스합니다.
그러나 Python 스크립트에 코드 실행 중에 수정되는 사전이 여러 개 있는 경우 KeyErrors가 자주 발생합니다. 그리고 당신이 그들을 처리할 수 있는 몇 가지 다른 방법이 있습니다.
이 자습서에서는 다음을 배우게 됩니다.
- KeyError가 무엇이며 왜 발생합니까?
- KeyError를 처리하는 방법
- 누락된 키를 더 잘 처리하기 위해 내장 dict 클래스에서 상속되는 하위 클래스인 Python의 defaultdict를 사용하는 방법
의 시작하자!
Python에서 KeyErrors란 무엇입니까?

Python 사전을 정의할 때 다음 사항을 확인해야 합니다.
- 키는 반복 없이 고유해야 합니다.
- 기존 iterable을 사전의 키로 사용할 때 튜플과 같은 불변 컬렉션을 사용하는 것이 좋습니다.
따라서 키는 사전에 있는 경우에만 유효합니다. 그렇지 않으면 KeyErrors가 발생합니다.
키가 책의 이름이고 값이 저자의 이름인 다음 사전 books_authors
를 고려하십시오.
Python REPL에서 이 자습서와 함께 코딩할 수 있습니다.
books_authors = { 'Deep Work':'Cal Newport', 'Hyperfocus':'Chris Bailey', 'Pivot':'Jenny Blake', 'The Happiness Equation':'Neil Pasricha' }
키(도서명)를 이용하여 저자명에 접근할 수 있습니다.
books_authors['Hyperfocus'] 'Chris Bailey'
사전의 모든 키-값 쌍에 액세스하려면 아래와 같이 사전 객체에서 items()
메서드를 호출하면 됩니다.
for book,author in books_authors.items(): print(f"'{book}' by {author}")
'Deep Work' by Cal Newport 'Hyperfocus' by Chris Bailey 'Pivot' by Jenny Blake 'The Happiness Equation' by Neil Pasricha
사전에 없는 키 값에 액세스하려고 하면 Python 인터프리터가 KeyError를 발생시킵니다. 존재하지 않는 키, 즉 'Grit' 및 '존재하지 않는 키'의 값에 액세스하려고 하면 KeyError가 발생합니다.
books_authors['Grit']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-6-e1a4486f5ced> in <module> ----> 1 books_authors['Grit'] KeyError: 'Grit'
books_authors['non-existent-key']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-7-a3efd56f69e5> in <module> ----> 1 books_authors['non-existent-key'] KeyError: 'non-existent-key'
그렇다면 Python에서 KeyErrors는 어떻게 처리합니까?
몇 가지 방법이 있으며 다음 섹션에서 학습할 것입니다.
Python에서 KeyError를 처리하는 방법

다음을 사용하여 KeyErrors를 처리하는 방법을 알아보겠습니다.
- If-else 조건문
- 시도 제외 블록
- 사전 메서드
.get()
#1. If-Else 조건문 사용
Python에서 KeyErrors를 처리하는 가장 간단한 방법 중 하나는 if-else 조건문을 사용하는 것입니다.
Python에서 if-else 문에는 다음과 같은 일반 구문이 있습니다.
if condition: # do this else: # do something else
- 조건이
True
if
본문의 문이 실행되고 - 조건이
False
이면else
본문의 문이 실행됩니다.
이 예에서 조건은 사전에 키가 있는지 확인하는 것입니다.
키가 사전에 있으면 in
연산자는 True
를 반환하고 본문이 실행되면 해당 값을 출력합니다.
key = 'The Happiness Equation' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Neil Pasricha
키가 사전에 없으면 in
연산자는 False
를 반환하고 else
본문이 실행됩니다. 키가 없다는 메시지를 출력합니다.
key = 'non-existent-key' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Sorry, this key does not exist!
#2. Try-Except 문 사용

KeyError를 처리하는 또 다른 일반적인 방법은 Python에서 try-except 문을 사용하는 것입니다.
다음 코드 블록을 읽으십시오.
key = 'non-existent-key' try: print(books_authors[key]) except KeyError: print('Sorry, this key does not exist!')
- try 블록은 제공된 키에 해당하는 값을 검색하려고 시도합니다.
- 키가 없으면 인터프리터는 예외 블록 내에서 예외로 처리되는 KeyError를 발생시킵니다.
#삼. .get() 메서드 사용
Python에서는 내장된 사전 메서드 .get()을 사용하여 누락된 키를 처리할 수 있습니다.
get()
메서드를 사용하는 일반적인 구문은dict.get(key,default_value)
입니다. 여기서dict
는 Python에서 유효한 사전 객체입니다.– 키가 사전에 있으면
get()
메서드가 값을 반환합니다.
– 그렇지 않으면 기본값을 반환합니다.
이 예에서 keys
는 액세스하려는 값의 키 목록입니다. 키 목록을 반복하여 books_authors
사전에서 해당 값을 검색합니다.
여기서는 '존재하지 않음'을 기본값으로 하여 .get() 메서드를 사용했습니다.
keys = ['Grit','Hyperfocus','Make Time','Deep Work'] for key in keys: print(books_authors.get(key,'Does not exist'))
위의 코드에서:

-
books_authors
사전에 있는 키의 경우.get()
메서드는 해당 값을 반환합니다. - 이 경우 'Grit' 및 'Make Time' 키가 존재하지 않는 경우 .get() 메서드는 기본값인 'Does not exist'를 반환합니다.
# Output Does not exist Chris Bailey Does not exist Cal Newport
위의 모든 방법은 주요 오류를 처리하는 데 도움이 됩니다. 그러나 그것들은 장황하며 누락된 키를 명시적으로 처리해야 합니다. 일반 사전 대신 defaultdict 를 사용하여 이 프로세스를 단순화할 수 있습니다.
파이썬의 Defaultdict

defaultdict는 사전( dict
) 클래스의 하위 클래스입니다. 따라서 Python 사전의 동작을 상속합니다. 또한 기본적으로 누락된 키도 처리합니다.
defaultdict 는 collections
모듈 내부의 Python 표준 라이브러리에 빌드된 컨테이너 데이터 유형입니다.
따라서 작업 환경으로 가져와야 합니다.
from collections import defaultdict
defaultdict
를 사용하는 일반적인 구문은 다음과 같습니다.
defaultdict(default_factory)
int, float 또는 list와 같은 콜러블을 default_factory
속성으로 지정할 수 있습니다. default_factory
값을 제공하지 않으면 기본값은 None
입니다.
찾고 있는 키가 없으면 __missing__()
메서드가 트리거되고 default_factory
에서 기본값을 유추합니다. 그런 다음 이 기본값을 반환합니다.
요약해서 말하자면:
- Python에서
defaultdict
는 키가 없을 때 기본값을 반환합니다. - 또한 이 키-기본값 쌍을 사전에 추가하여 수정할 수 있습니다.
Python Defaultdict 예제

다음으로 Python defaultdict가 작동하는 방식을 이해하기 위해 몇 가지 예제를 코딩할 것입니다.
기본 정수 값을 사용하는 Python의 Defaultdict
먼저 collections
모듈에서 defaultdict
를 가져옵니다.
from collections import defaultdict import random
defaultdict prices
를 생성해 보겠습니다.
prices = defaultdict(int)
이제 fruits
목록의 항목을 키로 사용하여 prices
사전을 채웁니다. 그리고 price_list
에서 값을 무작위로 샘플링하여 값을 얻습니다.
price_list = [10,23,12,19,5] fruits = ['apple','strawberry','pomegranate','blueberry'] for fruit in fruits: prices[fruit] = random.choice(price_list)
prices
defaultdict의 키-값 쌍을 살펴보겠습니다.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])
일반 Python 사전과 마찬가지로 다음 키를 사용하여 prices
defaultdict의 값에 액세스할 수 있습니다.
prices['apple'] # 23
이제 존재하지 않는 과일, 예를 들어 '오렌지'의 가격에 접근해 봅시다. 기본값 0을 반환하는 것을 볼 수 있습니다.
prices['orange'] # 0
사전을 인쇄하면 기본 정수 값이 0인 새 키 'orange'가 추가되었음을 알 수 있습니다.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])
List를 기본값으로 사용하는 Python의 Defaultdict
students_majors
를 목록의 defaultdict
로 정의해 보겠습니다. 전공의 이름이 열쇠입니다. 그리고 값은 수학, 경제학, 컴퓨터 과학 등과 같은 각 전공을 추구하는 학생들의 목록입니다.
from collections import defaultdict students_majors = defaultdict(list)
'경제'에 해당하는 학생 목록에 액세스하려고 하면 defaultdict는 빈 목록을 반환합니다. 키 오류 없음!
students_majors['Economics'] # []
이제 '경제학' 전공에 매핑된 빈 목록이 있습니다. 따라서 이제 목록 메서드 .append()
를 사용하여 이 목록에 요소를 추가할 수 있습니다.
students_majors['Economics'].append('Alex')
students_majors
기본 사전에 '경제'에 대한 항목이 생성되었습니다.
print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex']})
경제학 전공에 매핑되는 목록에 더 많은 학생을 추가하고 새 전공을 추가하는 등의 작업을 할 수 있습니다!
students_majors['Economics'].append('Bob') students_majors['Math'].append('Laura') print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})
결론
이 튜토리얼이 Python에서 defaultdict 를 언제 어떻게 사용해야 하는지 이해하는 데 도움이 되었기를 바랍니다. 이 자습서의 코드 예제를 실행한 후 필요할 때 defaultdict를 프로젝트의 기본 데이터 구조로 사용해 볼 수 있습니다.
다음은 이 튜토리얼에서 배운 내용을 요약한 것입니다.
- Python 사전으로 작업할 때 종종 KeyErrors가 발생합니다.
- 이러한 KeyErrors를 처리하기 위해 몇 가지 장황한 방법을 사용할 수 있습니다. 조건문, try-except 블록 또는 .get() 메서드를 사용할 수 있습니다. 그러나 컬렉션 모듈의 defaultdict 데이터 유형은 이 KeyError 처리를 단순화할 수 있습니다.
- default_factory 가 유효한 호출 가능인 경우 defaultdict(default_factory) 를 사용할 수 있습니다.
- defaultdict에 키가 없으면 기본값( default_factory 에서 유추)과 키가 defaultdict에 추가됩니다.
다음으로 Python 지도 기능에 대한 자습서를 확인하세요.