Python에서 Defaultdict를 언제 어떻게 사용해야 합니까?

이 튜토리얼에서는 Python 사전으로 작업할 때 KeyErrors를 더 잘 처리하기 위해 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는 어떻게 처리합니까?

  PS4에서 NAT 유형 수정 실패

몇 가지 방법이 있으며 다음 섹션에서 학습할 것입니다.

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를 사용하여 이 프로세스를 단순화할 수 있습니다.

  YouTube에서 메시지를 보내는 방법

파이썬의 Defaultdict

defaultdict는 사전(dict) 클래스의 하위 클래스입니다. 따라서 Python 사전의 동작을 상속합니다. 또한 기본적으로 누락된 키도 처리합니다.

defaultdict는 컬렉션 모듈 내부의 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

먼저 컬렉션 ​​모듈에서 defaultdict를 가져옵니다.

from collections import defaultdict
import random

defaultdict 가격을 생성해 보겠습니다.

prices = defaultdict(int)

이제 과일 목록의 항목을 키로 사용하여 가격 사전을 채웁니다. 그리고 price_list에서 값을 무작위로 샘플링하여 값을 얻습니다.

price_list = [10,23,12,19,5]
fruits = ['apple','strawberry','pomegranate','blueberry']

for fruit in fruits:
  prices[fruit] = random.choice(price_list)

가격 defaultdict의 키-값 쌍을 살펴보겠습니다.

print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])

일반 Python 사전과 마찬가지로 다음 키를 사용하여 price 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를 프로젝트의 기본 데이터 구조로 사용해 볼 수 있습니다.

  Viber에서 비밀 자기 파괴 메시지를 보내는 방법

다음은 이 튜토리얼에서 배운 내용을 요약한 것입니다.

  • Python 사전으로 작업할 때 종종 KeyErrors가 발생합니다.
  • 이러한 KeyErrors를 처리하기 위해 몇 가지 장황한 방법을 사용할 수 있습니다. 조건문, try-except 블록 또는 .get() 메서드를 사용할 수 있습니다. 그러나 컬렉션 모듈의 defaultdict 데이터 유형은 이 KeyError 처리를 단순화할 수 있습니다.
  • default_factory가 유효한 호출 가능인 경우 defaultdict(default_factory)를 사용할 수 있습니다.
  • defaultdict에 키가 없으면 default 값(default_factory에서 유추)과 키가 defaultdict에 추가됩니다.

다음으로 Python 지도 기능에 대한 자습서를 확인하세요.