وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

پایتون: بررسی کنید که آیا کلید در دیکشنری وجود دارد یا خیر

0 17
زمان لازم برای مطالعه: 3 دقیقه


معرفی

دیکشنری (همچنین به عنوان «نقشه»، «هش» یا «آرایه انجمنی» نیز شناخته می‌شود) یک پایتون داخلی است. 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 استثنا.

هر زمان که برنامه ما نتواند کلید مربوطه را در فرهنگ لغت پیدا کند، استثنای زیر ایجاد می شود.

پیشنهاد می‌کنیم بخوانید:  خطای «AttributeError: شی ماژول فاقد ویژگی «Serial» در پایتون است را برطرف کنید

این یک راه ساده، زیبا و سریع برای مدیریت جستجوی کلید است:

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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید