Python 사전에 키가 있는지 확인하는 방법

Python 사전에 키가 있는지 확인하는 방법을 알아보세요. in 연산자, get() 메소드, setdefault 및 KeyError 예외 처리를 비교하십시오.

Editor에서 이 솔루션을 사용해 보세요.

개요

사용자 매개변수 구문 분석, 구성 재정의, API 레코드 또는 JSON 페이로드 등 동적으로 채워진 사전과 상호작용할 때 존재하지 않는 키를 사용하여 값을 검색하려고 하면 'KeyError'가 발생하고 애플리케이션이 중단됩니다. 따라서 방어 점검을 구현하는 것이 필수적입니다.

키가 존재하는지 확인하는 가장 직접적이고 파이썬적이며 가장 빠른 방법은 `in` 멤버십 연산자인 `if key in my_dict:`를 사용하는 것입니다. 이 표현식은 키가 발견되면 'True'를 반환하고, 그렇지 않으면 'False'를 반환합니다. 내부적으로 Python 사전은 해시 테이블을 사용하여 구현되어 멤버십 검사를 고도로 최적화하고 O(1) 평균 시간 복잡성으로 실행합니다.

또는 키 값을 검색하고 싶지만 키가 누락된 경우 기본값으로 대체하려는 경우 `.get(key, default)` 메서드를 사용할 수 있습니다. 키가 존재하면 값을 반환합니다. 그렇지 않은 경우 `KeyError`를 발생시키거나 조건문을 요구하지 않고 기본값(생략된 경우 `None`)을 반환합니다.

코드 및 실행 출력

이 스크립트는 in 연산자, get() 대체 메소드를 사용하여 키 존재를 확인하고 KeyError 예외를 처리하는 방법을 보여줍니다.

user = {"id": 101, "name": "Alice", "role": "admin"}

# 1. Checking key existence using the 'in' operator (Recommended)
if "role" in user:
    print("Found 'role' key. Value is:", user["role"])

if "email" not in user:
    print("'email' key is missing.")

# 2. Retrieving value safely using get() with a fallback
email_address = user.get("email", "no-email@example.com")
print("Email address:", email_address)

# 3. Handling KeyError exception manually
try:
    invalid_lookup = user["location"]
except KeyError:
    print("Caught KeyError: 'location' key does not exist.")
터미널 출력
Found 'role' key. Value is: admin
'email' key is missing.
Email address: no-email@example.com
Caught KeyError: 'location' key does not exist.

단계별 구현

  • 표준 키 존재 여부를 확인하려면 in 연산자(예: 사전에 키가 있는 경우)를 사용하세요.
  • 사전 구조에서 키가 누락되었는지 확인하려면 not in 연산자를 사용하세요.
  • 기본 대체를 제공하면서 값을 안전하게 검색하려면 Dictionary.get(key, default_value)을 호출하세요.
  • 타사 통합에서 누락된 키를 처리할 때 Try-Exception KeyError 블록으로 직접 조회를 래핑합니다.

자주 묻는 질문

사전에 키가 있는지 확인하는 데 걸리는 시간 복잡도는 얼마입니까?

사전은 후드 아래에서 해시 테이블을 사용하여 크기에 관계없이 조회 시간을 일정하게 만들기 때문에 평균 시간 복잡도는 O(1)입니다.

사전에 값이 존재하는지 확인할 수 있나요?

예, 하지만 my_dict.values():의 값인 경우 값 보기:를 검색해야 합니다. Python은 사전의 모든 요소를 ​​순회해야 하기 때문에 값 확인에는 O(N) 선형 시간이 소요됩니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.