>백엔드 개발 >파이썬 튜토리얼 >Python에서 defaultdict 설명하기

Python에서 defaultdict 설명하기

Susan Sarandon
Susan Sarandon원래의
2024-12-17 12:24:26675검색

Explaining defaultdict in Python

사용 사례

이 페이지의 목적은 무엇인가요? 특히 이상한 이름에 대해 궁금해하면서 collections 모듈에서 Python의 defaultdict의 개념과 사용법을 설명하는 것입니다. David Baezley의 Advanced Python Mastery에서 영감을 받았습니다. ex_2_2 > 컬렉션.

기본값:

  • 누락된 키에 대한 기본값 제공
  • 키를 자동으로 초기화하여 KeyError를 방지합니다
  • 요소 초기화의 기본 동작을 따서 명명되었습니다
  • 수동 확인 및 삽입을 방지하여 코드 단순화
  • 호출 가능한 개체(유형 또는 함수)만 초기화에 전달됩니다
  • 주어진 예에서는 목록이 기본 팩토리로 사용됩니다
  • 누락된 키에 대한 빈 목록이 자동으로 생성됨을 의미합니다
  • 데이터를 효율적으로 그룹화할 수 있습니다
  • 기타 리터럴 기본값에 대해 람다 함수를 사용할 수도 있습니다
  • 예: defaultdict(lambda: 0)은 누락된 키에 대해 0을 반환합니다

고급 Python Mastery의 예제 코드

portfolio
[{'name': 'AA', 'shares': 100, 'price': 32.2}, {'name': 'IBM', 'shares': 50, 'price': 91.1}, {'name': 'CAT', 'shares': 150, 'price': 83.44}, {'name': 'MSFT', 'shares': 200, 'price': 51.23}, {'name': 'GE', 'shares': 95, 'price': 40.37}, {'name': 'MSFT', 'shares': 50, 'price': 65.1}, {'name': 'IBM', 'shares': 100, 'price': 70.44}]
print("### DEFAULTDICT")
from collections import defaultdict

print("#### Group data, e.g. find all stocks with the same name")
byname = defaultdict(list)
for s in portfolio:
    byname[s["name"]].append(s)
byname

# defaultdict(<class 'list'>, {'AA': [{'name': 'AA', 'shares': 100, 'price': 32.2}], 'IBM': [{'name': 'IBM', 'shares': 50, 'price': 91.1}, {'name': 'IBM', 'shares': 100, 'price': 70.44}], 'CAT': [{'name': 'CAT', 'shares': 150, 'price': 83.44}], 'MSFT': [{'name': 'MSFT', 'shares': 200, 'price': 51.23}, {'name': 'MSFT', 'shares': 50, 'price': 65.1}], 'GE': [{'name': 'GE', 'shares': 95, 'price': 40.37}]})

print('#### Find all stocks with the name "IBM"')
byname["IBM"]
# >>> [{'name': 'IBM', 'shares': 50, 'price': 91.1}, {'name': 'IBM', 'shares': 100, 'price': 70.44}]

람다의 예:

from collections import defaultdict

byname = defaultdict(lambda: 0)
print(byname["missing_key"])  # This will return 0

위 내용은 Python에서 defaultdict 설명하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.