Tôi thường sử dụng các thành ngữ sau khi làm việc với một cuốn từ điển Python:Cách kiểm tra khóa trong defaultdict mà không cập nhật từ điển (Python)?
try:
val = dct[key]
except KeyError:
print key, " is not valid"
vì đối với từ điển lớn, báo cáo kết quả
if key in dct:
# do something
không phải là rất hiệu quả (vì vậy tôi nhớ đọc, nhưng tôi đã chú ý nó trong thực tế)
Hôm nay tôi đã làm việc với một defaultdict và trong một khoảnh khắc tôi quên rằng một defaultdict sẽ không bao giờ cung cấp cho bạn một KeyError mà thay vào đó sẽ cập nhật từ điển gốc.
Tôi làm cách nào để thực hiện tra cứu mà không cập nhật defaultdict? Tôi thực sự cần in một lỗi để người dùng có thể nhập lại khóa.
Cảm ơn bạn!
CẬP NHẬT: Một số áp phích cho rằng niềm tin của tôi rằng if key in dct:
là chậm. Tôi quay lại và kiểm tra cuốn sách mà tôi đã đọc tốt hơn là sử dụng try: except:
. Đó là sách dạy nấu ăn Python năm 2002, Công thức 1.4 của Alex Martelli, có thể tìm thấy trực tuyến tại đây: Add an entry to dictionary. Ký ức cũ quá đáng tin cậy! Công thức không đề cập đến "chậm hơn" và nó thậm chí không sử dụng in
nhưng has_key
. Nó chỉ đơn giản nói rằng try: except:
là nhiều Pythonic (ít nhất là phiên bản cuốn sách của công thức). Cảm ơn bạn đã sửa và trả lời.
Có thể trùng lặp http://stackoverflow.com/questions/1602934/what-is-a-good-way-to-test-if-a-key-exists-in-python-dictionary –
Không phải là bản dupe; cái này về 'defaultdict'. –
'khóa trong d' không chậm, thời gian. Nếu bạn nói cách khác, bạn tốt hơn có bằng chứng vững chắc. 'timeit' nói nó nhanh như một thành công' d [key] ', và nhiều (gần 10x) nhanh hơn một' d [key] '+' ngoại trừ: pass' (được cấp, nó có thể hơi nhanh hơn một 'rõ ràng) nếu' nếu khóa gần như luôn luôn hiện diện). Bây giờ, khóa 'key in d.keys()' (Python 2.x) hoặc 'trong danh sách (d.keys()) '(Python 3.x) là chậm, nhưng bởi vì nó cố tình vứt bỏ thông tin bảng băm. – delnan