از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش استفاده از DefaultDict در پایتون
سرفصلهای مطلب
در طول مدتی که با مجموعه دادهها در پایتون کار میکردم، دیکشنری بیشترین استفاده را از ساختار داده برای من داشته است. این همه کاره و آسان برای استفاده است.
آیا نیاز به شمارش اتفاقات یک شخصیت دارید؟ از یک دیکشنری استفاده کن!
آیا می خواهید لیستی از بازیکنان فوتبال و آمار مربوط به آن ایجاد کنید؟ فرهنگ لغت!
اگرچه آنها ضد احمق نیستند. در بسیاری از کارها، هنگام جمعآوری دادهها، با خطاهای کلیدی زیادی مواجه میشوید که پرداختن به آنها میتواند ناامیدکننده باشد.
برخورد با این خطاها منجر به ایجاد چندین خط کد اضافی می شود. این باعث کاهش خوانایی و افزایش پیچیدگی می شود. اگر داده های زیادی را مدیریت می کنید، این مشکل می تواند از کنترل خارج شود.
ماژول مجموعه ها به این مشکل پیچیدگی می پردازد. ماژول مجموعه ها بخشی از کتابخانه استاندارد پایتون است که شامل چند روش عالی برای بحث کردن داده ها است. هدف اصلی ماژول این است که کد شما را خواناتر کند و پردازش داده ها را با انواع اضافی ساده کند.
چیزی که من بیشتر از همه استفاده می کنم این است defaultdict
، و ما امروز چند مورد استفاده ساده برای آن را بررسی خواهیم کرد. برای درک کامل این داده ها container، باید دانش کاری پایتون داشته باشید. به طور خاص، نوع دیکشنری معمولی.
چگونه کد خود را با DefaultDict ساده کنید
قبل از پرداختن به موضوع امروز، بیایید به یک موقعیت نگاه کنیم. من می خواهم یک فرهنگ لغت ایجاد کنم که تعداد حروف مختلف کلمه “می سی سی پی” را به من بدهد. S و P زیاد است و من وقت ندارم همه آنها را با دست بشمارم.
در اینجا روش انجام این کار با استفاده از یک فرهنگ لغت استاندارد آمده است:
به اندازه کافی ساده این برنامه:
- از طریق رشته تکرار می شود.
- هر بار تکرار، بررسی میکرد که آیا نامه در حال حاضر ورودی به فرهنگ لغت حروف ما دارد یا خیر.
- اگر حرف موجود باشد، یک عدد به مقدار فعلی اضافه می کند.
- اگر حرف در فرهنگ لغت حروف وجود نداشته باشد، ورودی را ایجاد کرده و مقدار اولیه را 1 قرار می دهد.
این مثال بسیار آسان بود، اما میتوانید پیچیدگی کد را در حال حاضر مشاهده کنید. بیایید ببینیم چگونه می توانیم بهتر عمل کنیم:
باید توجه داشته باشید که تمام عبارات شرطی اکنون از بین رفته اند. خواندن کد باید کمی ساده تر باشد، اما ما همچنان در پایان برنامه به همان نتیجه رسیدیم.
این مزیت است defaultdict
. بیایید این داده ها را بشکنیم container پایین.
کاوش در داده های DefaultDict Container
ایده الف defaultdict
ساده است: اگر بخواهیم به کلیدی که وجود ندارد دسترسی پیدا کنیم یا مقدار آن را تغییر دهیم، ورودی را در فرهنگ لغت با مقدار پیش فرض داده شده ایجاد می کند.
در مثال بالا، ما با یک پیش فرض خالی و بدون ورودی شروع کردیم. برای هر حرف منحصر به فردی که تجزیه کردیم، فرهنگ لغت یک مدخل ایجاد کرد. از آنجایی که استفاده کردیم int
به عنوان مقدار پیش فرض، مقدار مدخل ایجاد شده 0 بود. پس از اینکه فرهنگ لغت مدخل را ایجاد کرد، یک ورودی به مدخل اضافه کرد.
در پایان برنامه، شمارش حروف بدون شرط یا مداخله دستی خروجی شد. خیلی پایتونیک
روش تنظیم پیش فرض در DefaultDict
را defaultdict
داده ها container یک آرگومان منفرد را در طول مقداردهی اولیه خود می گیرد که به نام آن نامگذاری شده است default_factory
.
این default_factory
آرگومان یک تابع است. هنگامی که برنامه سعی می کند به ورودی که وجود ندارد دسترسی پیدا کند، defaultdict
تماس می گیرد default_factory
بدون هیچ استدلالی بنابراین، به عنوان مثال، من می توانم تماس بگیرید defaultdict
با عملکرد int()
مثل این:
d1 = defaultdict(int)
وقتی سعی می کنم به ورودی که وجود ندارد دسترسی پیدا کنم، آن ورودی را با مقدار the اضافه می کنم int
تابع، که 0 است.
بررسی امکانات DefaultDict
اکنون که کاربرد اساسی آن را می دانید defaultdict
، می توانیم احتمالات را بررسی کنیم.
همانطور که قبلا ذکر کردم، default_factory
یک تابع بدون آرگومان است. این بدان معناست که ما میتوانیم از انواع دادههای داخلی و همچنین توابع تعریفشده سفارشی استفاده کنیم – تا زمانی که آرگومانها را دریافت نکنند.
بیایید به مثال می سی سی پی خود برگردیم. من می خواهم بدانم شاخص واقعی تمام حرف من کجاست. من قصد دارم از a استفاده کنم defaultdict
با لیستی برای default_factory
آرگومان تا بتوانیم همه شاخص ها را ردیابی کنیم.
from collections import defaultdict
my_word = "Mississippi"
d1 = defaultdict(list)
for index, letter in enumerate(my_word):
if letter == "i":
d1[letter].append(index)
print(d1)
# defaultdict(<class 'list'>, {'i': [1, 4, 7, 10]})
عالی! من این مثال را به صورت دستی بررسی کردم و به نظر می رسد درست است. حرف من در فهرست 1، 4، 7 و 10 وجود دارد.
این مثال کمی متفاوت به نظر می رسد، اما ایده همچنان یکسان است. در اینجا مراحل انجام می شود:
- من ایجاد کردم
defaultdict
باdefault_factory
استدلال ازlist
. - من از طریق کلمه “می سی سی پی” تکرار کردم.
- اگر حرف تکرار شده برابر با “i” باشد، با کلید “i” به فرهنگ لغت دسترسی پیدا می کنم.
- اگر آن مدخل در فرهنگ لغت از قبل وجود نداشته باشد،
defaultdict
داده ها container آن را برای من ایجاد می کند و از یک لیست خالی به عنوان مقدار استفاده می کند. - سپس از روش ضمیمه لیست برای اضافه کردن نمایه حرف تکرار شده استفاده می کنم.
بیایید بیشتر کاوش کنیم. از آنجا که default_factory
یک تابع را به عنوان یک آرگومان می گیرد، ما می توانیم تابع خود را تعریف کنیم – تا زمانی که تابع سفارشی ما آرگومان نگیرد.
من یک تابع را در اینجا تعریف کردم تا به سادگی “Hello!” را برگرداند. و آن را به default_factory
بحث و جدل. اکنون، وقتی سعی می کنیم به مدخل هایی در فرهنگ لغت خود دسترسی پیدا کنیم که وجود ندارند، defaultdict
تابع سفارشی من را برای تعیین مقدار پیش فرض فراخوانی می کند!
برای جمع بندی
در این راهنما، به این موارد پرداختیم defaultdict
، که یک داده است container در ماژول مجموعه های داخلی از کتابخانه استاندارد پایتون. این به ما امکان می دهد با ایجاد آنها به مدخل هایی در فرهنگ لغت دسترسی پیدا کنیم که وجود ندارند روی fly و اختصاص یک مقدار پیش فرض.
دیدیم که defaultdict
الف می گیرد default_factory
آرگومان، که به فرهنگ لغت میگوید مقدار پیشفرض یک کلید را بدهد. اینها می توانند توابع داخلی باشند، مانند int
یا list
، یا می توانند توابع سفارشی تعریف شده باشند، مانند ما return_hello
عملکرد بالا
امیدوارم امروز چیزی یاد گرفته باشید!
منتشر شده در 1403-05-02 04:42:09