Làm thế nào bạn sẽ kiểm tra xem một biến là một từ điển trong Python?
Đây là một câu hỏi tuyệt vời, nhưng thật không may là câu trả lời được nâng cấp nhiều nhất dẫn đến một khuyến nghị kém,
try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
1.[Lưu ý rằng bạn cũng không nên sử dụng
try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
2 làm tên biến - đó là tên của đối tượng tích hợp.]Nếu bạn đang viết mã sẽ được nhập và sử dụng bởi những người khác, đừng cho rằng họ sẽ sử dụng trực tiếp Dict Buildin - làm cho giả định đó làm cho mã của bạn không linh hoạt hơn và trong trường hợp này, hãy tạo các lỗi dễ bị ẩn mà không gây ra cho chương trình .
Tôi thực sự đề xuất, với mục đích chính xác, khả năng bảo trì và tính linh hoạt cho người dùng trong tương lai, không bao giờ có các biểu thức không linh hoạt hơn, không linh hoạt trong mã của bạn khi có các biểu thức thành ngữ linh hoạt hơn.
try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
3 là một thử nghiệm cho nhận dạng đối tượng. Nó không hỗ trợ kế thừa, nó không hỗ trợ bất kỳ sự trừu tượng nào và nó không hỗ trợ giao diện.Vì vậy, tôi sẽ cung cấp một số tùy chọn làm.
Hỗ trợ thừa kế:
Đây là khuyến nghị đầu tiên tôi sẽ đưa ra, bởi vì nó cho phép người dùng cung cấp lớp con Dict của riêng họ hoặc
try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
4, try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
5 hoặc try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
6 từ mô -đun Bộ sưu tập:try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
7Nhưng thậm chí còn có những lựa chọn linh hoạt hơn.
Hỗ trợ trừu tượng:
from collections.abc import Mapping
if isinstance[any_object, Mapping]:
Điều này cho phép người dùng mã của bạn sử dụng việc triển khai tùy chỉnh của riêng họ về ánh xạ trừu tượng, cũng bao gồm bất kỳ lớp con nào của
try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
2 và vẫn có được hành vi chính xác.Sử dụng giao diện
Bạn thường nghe lời khuyên OOP, "Chương trình cho một giao diện".
Chiến lược này tận dụng sự đa hình của Python hoặc gõ vịt.
Vì vậy, chỉ cần cố gắng truy cập giao diện, bắt các lỗi mong đợi cụ thể [
try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
9 trong trường hợp không có # Dictionary of string and int word_freq = { "Hello": 56, "at": 23, "test": 43, "this": 78 }0 và
# Dictionary of string and int word_freq = { "Hello": 56, "at": 23, "test": 43, "this": 78 }1 trong trường hợp
# Dictionary of string and int word_freq = { "Hello": 56, "at": 23, "test": 43, "this": 78 }2 không thể gọi được] với dự phòng hợp lý - và bây giờ bất kỳ lớp nào thực hiện giao diện sẽ cung cấp cho bạn các mục của nó [lưu ý
# Dictionary of string and int word_freq = { "Hello": 56, "at": 23, "test": 43, "this": 78 }3 đã biến mất trong Python 3]:
try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
Có lẽ bạn có thể nghĩ rằng sử dụng việc sử dụng vịt như thế này đi quá xa trong việc cho phép quá nhiều dương tính giả, và nó có thể, tùy thuộc vào mục tiêu của bạn cho mã này.
Sự kết luận
Không sử dụng
try:
items = any_object.items[]
except [AttributeError, TypeError]:
non_items_behavior[any_object]
else: # no exception raised
for item in items: ...
3 để kiểm tra các loại cho luồng điều khiển tiêu chuẩn. Sử dụng # Dictionary of string and int word_freq = { "Hello": 56, "at": 23, "test": 43, "this": 78 }5, xem xét các trừu tượng như
# Dictionary of string and int word_freq = { "Hello": 56, "at": 23, "test": 43, "this": 78 }6 hoặc
# Dictionary of string and int word_freq = { "Hello": 56, "at": 23, "test": 43, "this": 78 }7 và xem xét tránh kiểm tra loại hoàn toàn, sử dụng giao diện trực tiếp.
Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để kiểm tra xem giá trị có tồn tại trong từ điển hay không. Chúng tôi sẽ bao gồm các cách sau,
- Kiểm tra xem giá trị có tồn tại trong một dict bằng cách sử dụng câu lệnh không
- Kiểm tra xem một giá trị có tồn tại trong từ điển Python sử dụng cho vòng lặp không
- Kiểm tra xem giá trị có tồn tại trong từ điển bằng cách sử dụng bất kỳ [] và danh sách hiểu không
Giả sử chúng ta có một từ điển của chuỗi và ints, tức là.
# Dictionary of string and int word_freq = { "Hello": 56, "at": 23, "test": 43, "this": 78 }
Bây giờ trong từ điển này, chúng tôi muốn kiểm tra xem có bất kỳ khóa nào chứa giá trị 43 hay không. Có nhiều cách khác nhau để tìm kiếm một giá trị trong từ điển, hãy để chúng tôi thảo luận từng cái một,
Kiểm tra xem giá trị có tồn tại trong Dict bằng cách sử dụng câu lệnh không
Từ điển Python cung cấp một giá trị phương thức [], trả về một chuỗi tất cả các giá trị liên quan đến các khóa trong từ điển. Chúng ta có thể sử dụng ‘trong từ khóa để kiểm tra xem giá trị của chúng ta có tồn tại trong chuỗi giá trị đó hay không. Ví dụ,
Quảng cáo
value = 43 # python check if value exist in dict using "in" & values[] if value in word_freq.values[]: print[f"Yes, Value: '{value}' exists in dictionary"] else: print[f"No, Value: '{value}' does not exists in dictionary"]
Output:
Yes, Value: '43' exists in dictionary
Ở đây, giá trị 43 tồn tại từ điển của chúng tôi do đó nó trong tuyên bố được đánh giá là đúng.
Hãy cùng xem xét một ví dụ tiêu cực, nơi chúng ta sẽ cố gắng kiểm tra một giá trị không tồn tại trong từ điển. Ví dụ,
value = 51 # python check if value exist in dict using "in" & values[] if value in word_freq.values[]: print[f"Yes, Value: '{value}' exists in dictionary"] else: print[f"No, Value: '{value}' does not exists in dictionary"]
Output:
No, Value: '51' does not exists in dictionary
Ở đây, giá trị 51 không tồn tại trong từ điển của chúng tôi do đó nếu câu lệnh được đánh giá là sai.
Những bài viết liên quan:
- Nhận khóa liên kết với một giá trị trong một từ điển.
- Python: Kiểm tra xem chính có tồn tại theo từ điển không [6 cách]
Kiểm tra xem một giá trị có tồn tại trong từ điển Python sử dụng cho vòng lặp không
Chúng ta có thể lặp lại tất cả các cặp từ điển giá trị khóa bằng cách sử dụng vòng lặp và trong khi lặp lại, chúng ta có thể kiểm tra xem giá trị của chúng ta có khớp với bất kỳ giá trị nào trong các cặp giá trị khóa không. Chúng tôi đã tạo ra một chức năng riêng cho việc này. Hãy để hiểu điều này với một ví dụ,
def check_value_exist[test_dict, value]: do_exist = False for key, val in test_dict.items[]: if val == value: do_exist = True return do_exist value = 43 # Iterate over all key, value pairs in dict and check if value exist if check_value_exist[word_freq, value]: print[f"Yes, Value: '{value}' exists in dictionary"] else: print[f"No, Value: '{value}' does not exists in dictionary"]
Output:
Yes, Value: '43' exists in dictionary
Vì giá trị 43 tồn tại trong từ điển của chúng tôi, do đó Check_value_exist [] đã trả về đúng.
Kiểm tra xem giá trị có tồn tại trong từ điển bằng cách sử dụng bất kỳ [] và danh sách hiểu không
Sử dụng danh sách hiểu, lặp qua một chuỗi của tất cả các cặp giá trị khóa trong từ điển và tạo một danh sách bool. Danh sách sẽ chứa một sự thật cho mỗi lần xuất hiện giá trị của chúng tôi trong từ điển. Sau đó gọi bất kỳ [] chức năng nào trong danh sách các bools để kiểm tra xem nó có chứa bất kỳ đúng nào không. Nếu có thì điều đó có nghĩa là giá trị của chúng tôi tồn tại trong bất kỳ cặp giá trị khóa nào của từ điển.
# Check if key exist in dictionary using any[] if any[[True for k,v in word_freq.items[] if v == value]]: print[f"Yes, Value: '{value}' exists in dictionary"] else: print[f"No, Value: '{value}' does not exists in dictionary"]
Output:
Yes, Value: '43' exists in dictionary
Ở đây, giá trị 43 tồn tại trong từ điển do đó bất kỳ [] đã trả về đúng.
Conclusion:
Vì vậy, đây là những cách khác nhau để kiểm tra xem một giá trị có tồn tại trong từ điển hay không.