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

سرور مجازی NVMe

تفاوت بین پیش فرض پایتون و دیکت

0 4
زمان لازم برای مطالعه: 5 دقیقه


معرفی

در پایتون، دیکشنری ها یکی از انعطاف پذیرترین انواع داده های داخلی هستند. آنها برای ساختاردهی داده ها عالی هستند و می توانند به شما در حل مشکلات بی شماری کمک کنند. اما اگر به شما بگویم نسخه قدرتمندتری از دیکشنری ها وجود دارد که ممکن است نام آن را نشنیده باشید، چه؟ بله، من در مورد آن صحبت می کنم collections.defaultdict نوع

در این مقاله، بررسی خواهیم کرد که یک defaultdict است و تفاوت آن با یک فرهنگ لغت معمولی پایتون (یا dict به طور خلاصه).

دیکته چیست؟

آ dictیا دیکشنری، یک نوع داده داخلی پایتون است که مجموعه‌های تغییرپذیر و نامرتب از جفت‌های کلید-مقدار را ذخیره می‌کند. هر جفت کلید-مقدار در فرهنگ لغت، کلید را به مقدار مرتبط خود ترسیم می کند، و بازیابی مقادیر برای کلیدهای خاص را آسان تر می کند.

student = {
    "name": "John Doe",
    "age": 20,
    "courses": ("Math", "Science")
}

print(student("name"))

در این کد، کلیدها «نام»، «سن» و «دوره‌ها» هستند و هر کدام دارای مقادیر مرتبط هستند. شما می توانید با کلید آن به هر مقداری دسترسی پیدا کنید، همانطور که ما با آن انجام دادیم student("name").

اما وقتی سعی می کنید به کلیدی دسترسی پیدا کنید که در فرهنگ لغت وجود ندارد چه اتفاقی می افتد؟ خوب، پایتون یک را پرتاب می کند KeyError:

print(student("grade"))

این یکی از محدودیت های یک دیکشنری معمولی است. کلیدهای از دست رفته را خیلی خوب کنترل نمی کند. در برنامه های دنیای واقعی، اگر مراقب نباشید، این می تواند باعث از کار افتادن برنامه شما شود. اینجاست که defaultdicts وارد بازی شوید، اما بعداً در مقاله به آن خواهیم پرداخت.

توجه داشته باشید: می توانید اجتناب کنید KeyError استثنا در لغت نامه های معمولی با استفاده از get روش، که برمی گرداند None اگر کلید پیدا نشد با این حال، این همیشه ایده آل نیست، به خصوص زمانی که می خواهید یک مقدار پیش فرض غیر از None.

print(student.get("grade"))

پیش‌فرض چیست؟

آ defaultdict یک فرهنگ لغت تخصصی ارائه شده توسط collections ماژول در پایتون این یک زیر کلاس از داخلی است dict کلاس بنابراین، چه چیزی آن را بسیار خاص می کند؟ خوب، آن را پرتاب نمی کند KeyError وقتی سعی می کنید به کلیدهایی دسترسی پیدا کنید یا آنها را تغییر دهید که در واقع در فرهنگ لغت وجود ندارند. در عوض، آن را آن را با عنصری از نوع داده ای که در هنگام ایجاد آن به عنوان آرگومان ارسال می کنید، مقداردهی اولیه می کند defaultdict. هنگامی که با ساختارهای داده بزرگ کار می کنید، این می تواند بسیار مفید باشد.

بیایید نگاهی گذرا به روش راه اندازی a اولیه بیندازیم defaultdict:

from collections import defaultdict


dd = defaultdict(list)

در مثال بالا، اگر سعی کنید به کلیدی دسترسی پیدا کنید که وجود ندارد، پایتون یک لیست خالی برمی گرداند () به جای پرتاب الف KeyError.

print(dd("non_existent_key"))

آرگومانی که هنگام مقداردهی اولیه می گذرانید defaultdict نامیده میشود default_factory. این تابعی است که مقدار پیش‌فرض دیکشنری ایجاد شده را ارائه می‌کند. اگر این استدلال وجود نداشته باشد، پس defaultdict اساسا مانند یک عادی رفتار می کند dict.

تفاوت های کلیدی

حالا که فهمیدیم یک defaultdict است، اجازه دهید نگاهی به تفاوت های کلیدی بین a defaultdict و یک دیکشنری معمولی پایتون.

  • مقادیر پیش فرض: مهمترین تفاوت، همانطور که قبلاً دیدیم، این است defaultdict به طور خودکار یک مقدار پیش فرض را به یک کلید ناموجود اختصاص می دهد. این با استاندارد متفاوت است dict، که الف را بالا می برد KeyError هنگامی که سعی می کنید به یک کلید ناموجود دسترسی یا تغییر دهید.

d = {}
print(d("non_existent_key"))



from collections import defaultdict
dd = defaultdict(int)
print(dd("non_existent_key"))

  • مقداردهی اولیه: در حین مقداردهی اولیه a defaultdict، باید a default_factory تابعی که مقدار پیش فرض کلیدهای موجود را تعیین می کند. از سوی دیگر، یک استاندارد dict به این نیاز یا پشتیبانی نمی کند.
d = {}  
dd = defaultdict(list)  
  • موارد استفاده: defaultdict هنگامی که با مجموعه داده های بزرگی سروکار دارید که می خواهید از دست زدن به آنها اجتناب کنید، مفیدتر است KeyError استثناها. معمولاً برای گروه بندی، شمارش یا انباشت عملیات استفاده می شود.

زمان استفاده از defaultdict در مقابل dict

البته انتخاب بین defaultdict و dict بستگی به نیازهای خاص شما دارد اگر با موقعیتی روبرو هستید که می‌خواهید از خطاهای کلیدی جلوگیری کنید و از قبل می‌دانید که چه نوع مقدار پیش‌فرضی را برای کلیدهای موجود می‌خواهید، defaultdict راهی برای رفتن است

فرض کنید در حال ساخت یک فرهنگ لغت برای شمارش فراوانی کلمات در یک متن هستید. با یک فرهنگ لغت معمولی، باید بررسی کنید که آیا یک کلمه از قبل کلیدی در فرهنگ لغت است یا نه قبل از اینکه تعداد آن را افزایش دهید. با defaultdict، می توانید به سادگی نوع مقدار پیش فرض را به عنوان تنظیم کنید int و تعداد را بدون هیچ چکی افزایش دهید.

از طرف دیگر، اگر می خواهید برنامه شما هنگام دسترسی به یک کلید ناموجود خطا بدهد، یا اگر مقدار پیش فرض واضحی ندارید، یک عدد معمولی dict ممکن است مناسب تر باشد

روش استفاده از پیش فرض

استفاده کردن defaultdict کاملا سرراست است شما با وارد کردن آن از collections مدول. سپس، هنگامی که شما ایجاد می کنید defaultdict، از نوع پیش فرض دیکشنری عبور می کنید. این می تواند باشد int، list، set، dictیا حتی یک تابع تعریف شده توسط کاربر.

بیایید نگاهی به یک مثال بیندازیم. فرض کنید می خواهیم یک فرهنگ لغت برای ذخیره نمرات دانش آموزان در دروس مختلف ایجاد کنیم. می توانیم از a استفاده کنیم defaultdict با یک لیست به عنوان نوع پیش فرض:

from collections import defaultdict


grades = defaultdict(list)


grades('Math').append(85)
grades('English').append(90)

print(grades)

وقتی این کد را اجرا می کنید، خروجی زیر را دریافت خواهید کرد:

defaultdict(<class 'list'>, {'Math': (85), 'English': (90)})

همانطور که می بینید، ما مجبور نبودیم بررسی کنیم که آیا “ریاضی” یا “انگلیسی” از قبل کلیدهای فرهنگ لغت هستند یا خیر. ما توانستیم به طور مستقیم نمرات را اضافه کنیم. اگر سعی کنیم به نمرات موضوعی که هنوز اضافه نشده است دسترسی پیدا کنیم، به جای یک خطای کلیدی، یک لیست خالی دریافت می کنیم:

print(grades('Science'))

این خروجی خواهد داشت:

()

توجه داشته باشید: به یاد داشته باشید که نوع پیش فرضی که به آن منتقل می کنید defaultdict هست یک تابع، نه a ارزش. بنابراین، شما باید عبور کنید list بجای ()، یا int بجای 0.

روش استفاده از دیکت

پایتون dict یک نوع داده داخلی است که برای ذخیره داده ها در جفت های کلید-مقدار استفاده می شود. در اینجا یک مثال ساده از روش استفاده از آن آورده شده است:


my_dict = {'name': 'John', 'age': 30}


print(my_dict('name'))  


my_dict('age') = 31
print(my_dict('age'))  


my_dict('job') = 'Engineer'
print(my_dict)  

هنگام استفاده باید یک نکته را به خاطر بسپارید dict این است که آن را افزایش دهد KeyError اگر سعی می کنید به کلیدی دسترسی پیدا کنید که وجود ندارد:

print(my_dict('hobby'))  

توجه داشته باشید: برای جلوگیری از این، می توانید از get() روش، که برمی گرداند None یا یک مقدار پیش فرض انتخابی شما اگر کلید وجود ندارد.

print(my_dict.get('hobby'))  
print(my_dict.get('hobby', 'default'))  

نتیجه

در این مقاله، ما به دنیای دیکشنری های پایتون نگاه عمیق تری داشته ایم و به طور خاص بر روی dict و collections.defaultdict انواع ما تفاوت های کلیدی آنها را بررسی کرده ایم، مانند چگونگی defaultdict یک مقدار پیش‌فرض برای کلیدهای غیر موجود فراهم می‌کند، بنابراین اجتناب می‌کند KeyError استثناها. ما همچنین موارد استفاده آنها را بررسی کرده ایم dict برای سناریوهایی که باید به شدت کنترل کنید چه کلیدهایی در فرهنگ لغت شما وجود دارد، بهتر است defaultdict هنگامی که با مجموعه داده های بزرگ سروکار دارید و نیاز به اجتناب از بررسی دائمی وجود کلید دارید، مفیدتر است.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1402-12-28 12:45:04

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

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

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