Cách kiểm tra xem khóa có tồn tại trong từ điển Python không

Tìm hiểu cách kiểm tra xem khóa có tồn tại trong từ điển Python hay không. So sánh toán tử in, phương thức get(), setdefault và cách xử lý các ngoại lệ KeyError.

Hãy thử Giải pháp này trong Trình chỉnh sửa

Tổng quan

Khi tương tác với các từ điển được điền động—chẳng hạn như phân tích cú pháp tham số người dùng, ghi đè cấu hình, bản ghi API hoặc tải trọng JSON—việc cố truy xuất một giá trị bằng khóa không tồn tại sẽ gây ra `KeyError` và làm hỏng ứng dụng của bạn. Vì vậy, việc thực hiện kiểm tra phòng thủ là cần thiết.

Cách nhanh nhất, trực tiếp nhất và nhanh nhất để kiểm tra xem khóa có tồn tại hay không là sử dụng toán tử thành viên `in`: `if key in my_dict:`. Biểu thức này trả về `True` nếu tìm thấy khóa và `False` nếu không. Dưới lớp vỏ bọc, từ điển Python được triển khai bằng cách sử dụng bảng băm, giúp việc kiểm tra tư cách thành viên được tối ưu hóa cao, chạy với độ phức tạp thời gian trung bình O(1).

Ngoài ra, nếu bạn muốn truy xuất giá trị của khóa nhưng dự phòng về giá trị mặc định nếu khóa bị thiếu, bạn có thể sử dụng phương thức `.get(key, default)`. Nếu khóa tồn tại, nó sẽ trả về giá trị; nếu không, nó sẽ trả về giá trị mặc định của bạn (hoặc `None` nếu bị bỏ qua) mà không đưa ra `KeyError` hoặc yêu cầu các câu lệnh có điều kiện.

Đầu ra mã & thực thi

Tập lệnh này minh họa việc xác minh sự tồn tại của khóa bằng cách sử dụng toán tử in, phương thức dự phòng get() và xử lý các ngoại lệ 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.")
Đầu ra thiết bị đầu cuối
Found 'role' key. Value is: admin
'email' key is missing.
Email address: no-email@example.com
Caught KeyError: 'location' key does not exist.

Triển khai từng bước

  • Sử dụng toán tử in (ví dụ: if khóa trong từ điển :) để kiểm tra sự tồn tại của khóa tiêu chuẩn.
  • Sử dụng toán tử not in để kiểm tra xem một khóa có bị thiếu trong cấu trúc từ điển hay không.
  • Gọi từ điển.get(key, default_value) để truy xuất giá trị một cách an toàn trong khi cung cấp giá trị dự phòng mặc định.
  • Bao bọc các tra cứu trực tiếp trong các khối KeyError thử ngoại trừ khi xử lý các khóa bị thiếu trong tích hợp của bên thứ ba.

Câu hỏi thường gặp

Độ phức tạp về thời gian của việc kiểm tra xem khóa có tồn tại trong từ điển không?

Độ phức tạp về thời gian trung bình là O(1) vì từ điển sử dụng bảng băm một cách cơ bản, khiến thời gian tra cứu không đổi bất kể kích thước.

Tôi có thể kiểm tra xem một giá trị có tồn tại trong từ điển không?

Có, nhưng bạn phải tìm kiếm trong chế độ xem giá trị: if value in my_dict.values():. Lưu ý rằng việc kiểm tra giá trị mất thời gian tuyến tính O(N) vì Python phải duyệt qua mọi phần tử trong từ điển.

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.