از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
تفاوت بین پیش فرض پایتون و دیکت
سرفصلهای مطلب
معرفی
در پایتون، دیکشنری ها یکی از انعطاف پذیرترین انواع داده های داخلی هستند. آنها برای ساختاردهی داده ها عالی هستند و می توانند به شما در حل مشکلات بی شماری کمک کنند. اما اگر به شما بگویم نسخه قدرتمندتری از دیکشنری ها وجود دارد که ممکن است نام آن را نشنیده باشید، چه؟ بله، من در مورد آن صحبت می کنم 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
، باید adefault_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