از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
پایتون: بررسی کنید که آیا کلید در دیکشنری وجود دارد یا خیر
سرفصلهای مطلب
معرفی
دیکشنری (همچنین به عنوان «نقشه»، «هش» یا «آرایه انجمنی» نیز شناخته میشود) یک پایتون داخلی است. container که عناصر را به صورت a ذخیره می کند ارزش کلیدی جفت
درست مانند سایر کانتینرها که نمایه سازی عددی دارند، در اینجا نیز از کلیدها به عنوان نمایه استفاده می کنیم. کلیدها می توانند مقادیر عددی یا رشته ای باشند. با این حال، هیچ دنباله یا شیء قابل تغییری را نمی توان به عنوان یک کلید، مانند یک لیست، استفاده کرد.
در این مقاله نگاهی خواهیم داشت چگونه بررسی کنیم که آیا یک کلید در فرهنگ لغت در پایتون وجود دارد یا خیر.
در مثالها، ما از این استفاده خواهیم کرد fruits_dict
فرهنگ لغت:
fruits_dict = dict(apple= 1, mango= 3, banana= 4)
{'apple': 1, 'banana': 4, 'mango': 3}
بررسی کنید که آیا کلید وجود دارد یا خیر که در اپراتور
ساده ترین راه برای بررسی وجود کلید در فرهنگ لغت استفاده از آن است in
اپراتور. این یک عملگر ویژه است که برای ارزیابی عضویت یک مقدار استفاده می شود.
در اینجا یا به ارزیابی خواهد شد True
اگر کلید وجود داشته باشد یا به False
اگر اینطور نیست:
key = 'orange'
if key in fruits_dict:
print('Key Found')
else:
print('Key not found')
حالا چون ما نداریم orange
در فرهنگ لغت ما، نتیجه این است:
Key not found
این رویکرد مورد نظر و ترجیحی اکثر توسعه دهندگان است. زیر کاپوت از آن استفاده می کند __contains__()
عملکرد برای بررسی اینکه آیا یک کلید داده شده است in
فرهنگ لغت یا نه
بررسی کنید که آیا کلید وجود دارد یا خیر گرفتن()
را get()
تابع a را می پذیرد key
و یک مقدار اختیاری که اگر key
یافت نمی شود به طور پیش فرض، این مقدار اختیاری است None
. میتوانیم یک کلید دریافت کنیم، و اگر مقدار بازگشتی آن باشد None
، یعنی در فرهنگ لغت وجود ندارد:
key = 'orange'
if fruits_dict.get(key) == None:
print('Key not found')
else:
print('Key found')
این نتیجه در:
Key not found
بررسی کنید که آیا کلید وجود دارد یا خیر کلیدها()
را keys()
تابع کلیدها را از فرهنگ لغت ما به صورت توالی برمی گرداند:
fruits_dict.keys()
این دنباله شامل:
dict_keys(('apple', 'mango', 'banana'))
با استفاده از این دنباله، می توانیم بررسی کنیم که آیا کلید موجود است یا خیر. می توانید این کار را از طریق یک حلقه انجام دهید یا بهتر است از آن استفاده کنید in
اپراتور:
key = 'orange'
if key in fruits_dict.keys():
print('Key found')
else:
print('Key not found')
این نیز منجر به:
Key not found
بررسی کنید که آیا کلید وجود دارد یا خیر has_key()
بهجای دریافت دستی کلیدها و بررسی وجود مقدار مورد جستجو، میتوانیم از دست کوتاه استفاده کنیم. has_key()
تابع:
key = 'orange'
if fruits_dict.has_key(key):
print('Key found')
else:
print('Key not found')
برمی گردد True
یا False
، مستقر روی وجود کلید این کد خروجی می دهد:
Key not found
رسیدگی به استثنای «Error Key».
یک راه جالب برای جلوگیری از مشکلات با یک کلید غیر موجود یا به عبارت دیگر برای بررسی اینکه آیا یک کلید در فرهنگ لغت ما وجود دارد یا خیر، استفاده از try
و except
بند برای رسیدگی به KeyError
استثنا.
هر زمان که برنامه ما نتواند کلید مربوطه را در فرهنگ لغت پیدا کند، استثنای زیر ایجاد می شود.
این یک راه ساده، زیبا و سریع برای مدیریت جستجوی کلید است:
try:
fruits_dict(key)
except KeyError as err:
print('Key not found')
این رویکرد، اگرچه ممکن است غیر شهودی به نظر برسد، اما در واقع به طور قابل توجهی سریعتر از برخی رویکردهای دیگر است که تاکنون پوشش داده ایم.
توجه داشته باشید: لطفا توجه داشته باشید، استثناها نباید برای تغییر جریان کد یا پیاده سازی منطق استفاده شود. شلیک می کنند واقعا سریع، اما بهبودی از آنها واقعا کند است. در صورت امکان، این رویکرد نباید بر سایر رویکردها ترجیح داده شود.
بیایید عملکرد آنها را با هم مقایسه کنیم تا ایده بهتری در مورد سرعت اجرای آنها بدست آوریم.
مقایسه عملکرد
import timeit
code_setup = """
key = 'orange'
fruits_dict = dict(apple= 1, mango= 3, banana= 4)
"""
code_1 = """
if key in fruits_dict:
# print('Key Found')
pass
else:
# print('Key not found')
pass
"""
code_2 = """
if fruits_dict.get(key):
# print('Key found')
pass
else:
# print('Key not found')
pass
"""
code_3 = """
if fruits_dict.__contains__(key):
# print('Key found')
pass
else:
# print('Key not found')
pass
"""
code_4 = """
try:
# fruits_dict(key)
pass
except KeyError as err:
# print('Key not found')
pass
"""
code_5 = """
if key in fruits_dict.keys():
# print('Key found')
pass
else:
# print('Key not found')
pass
"""
print('Time of code_1: ', timeit.timeit(setup = code_setup , stmt= code_1, number= 10000000))
print('Time of code_2: ', timeit.timeit(setup = code_setup , stmt= code_2, number= 10000000))
print('Time of code_3: ', timeit.timeit(setup = code_setup , stmt= code_3, number= 10000000))
print('Time of code_4: ', timeit.timeit(setup = code_setup , stmt= code_4, number= 10000000))
print('Time of code_5: ', timeit.timeit(setup = code_setup , stmt= code_5, number= 10000000))
این خروجی:
Time of code_1: 0.2753713619995324
Time of code_2: 0.8163219139996727
Time of code_3: 0.5563563220002834
Time of code_4: 0.1561058730003424
Time of code_5: 0.7869278369998938
محبوب ترین انتخاب و رویکرد، استفاده از in
اپراتور نسبتا سریع است، و همچنین رویکرد مورد نظر برای حل این مشکل است.
نتیجه
در این مقاله، روشهای متعددی برای بررسی اینکه آیا یک کلید در فرهنگ لغت ما وجود دارد یا خیر، بحث کردیم. سپس مقایسه عملکرد را انجام دادیم.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-13 23:09:03