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

سرور مجازی NVMe

روش تبدیل جفت های تاپل به دیکشنری در پایتون

0 48
زمان لازم برای مطالعه: 9 دقیقه


معرفی

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

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

در این مقاله شما را در این زمینه راهنمایی می کنیم process تبدیل جفت تاپل به دیکشنری در پایتون. ما روش های مختلفی را برای دستیابی به این تبدیل بررسی خواهیم کرد و مزایا و مشکلات احتمالی هر رویکرد را مورد بحث قرار خواهیم داد. در پایان این مقاله، درک کاملی از روش کار با جفت‌های تاپل و دیکشنری‌ها و روش تبدیل بین دو ساختار داده خواهید داشت.

درک جفت های تاپل و دیکشنری ها

جفت تاپل شکل خاصی از تاپل ها هستند که هر تاپل دارای آن است دقیقا دو عنصر. این عناصر معمولاً به یکدیگر مرتبط هستند، مثلاً یک جفت کلید-مقدار یا نقاط مختصات (x، y). تاپل ها هستند تغییرناپذیر، به این معنی که پس از ایجاد تاپل نمی توان عناصر آنها را تغییر داد. این ویژگی زمانی مفید است که شما نیاز به ذخیره داده هایی دارید که نباید تغییر داده شوند.

جفت‌های تاپلی معمولاً هنگام برخورد با دنباله‌ای از جفت‌ها، مانند پردازش داده‌ها از فایل‌ها، تکرار چندین فهرست به طور همزمان، یا ذخیره مجموعه‌ای از روابط استفاده می‌شوند. به یک جفت تاپل ساده نگاه کنید:

student_grade = ('John', 85)

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

student_grades = {'John': 85, 'Alice': 90, 'Bob': 78}

دیکشنری ها ارائه می دهند چندین مزیت نسبت به جفت های تاپل:

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

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

روش‌هایی برای تبدیل جفت‌های تاپل به دیکشنری

در این بخش به سه روش مختلف برای تبدیل جفت تاپل به دیکشنری در پایتون می پردازیم. ما برای هر روش مثال هایی ارائه می دهیم و مزایای مربوط به آنها را مورد بحث قرار می دهیم.

استفاده از دیکشنری درک مطلب

درک فرهنگ لغت روشی مختصر برای ایجاد فرهنگ لغت در پایتون است. این شبیه به درک لیست است و نحوی مشابه دارد (از پرانتز استفاده می کند {} به جای پرانتز ()، اما به جای ایجاد یک لیست، یک فرهنگ لغت ایجاد می کند.

حال، بیایید نگاهی به روش استفاده از درک دیکشنری برای تبدیل لیستی از جفت‌های چندگانه به دیکشنری در پایتون بیندازیم. فرض کنید ما یک لیست از تاپل ها داریم:

list_of_tuples = (('a', 1), ('b', 2), ('c', 3))

ما میتوانیم این لیست تاپل ها را به دیکشنری تبدیل کنید با استفاده از درک فرهنگ لغت مانند زیر:

dict_from_tuples = {k: v for k, v in list_of_tuples}

اینجا k اشاره به کلید و v به مقدار هر تاپل اشاره دارد. نتیجه درک این فرهنگ لغت به صورت زیر خواهد بود:

{'a': 1, 'b': 2, 'c': 3}

توجه داشته باشید: اگر جفت بودن تاپل ها تضمین نشده باشد، ممکن است باعث a ValueError. برای جلوگیری از این امر، می توانید یک شرطی به درک مطلب اضافه کنید تا مطمئن شوید که فقط جفت ها گنجانده شده اند:

dict_from_tuples = {k: v for k, v in list_of_tuples if len(tuple) == 2}

این فقط شامل چند تایی به طول 2 در فرهنگ لغت می شود.

مزایای استفاده از این روش:

  • درک دیکشنری هستند آسان برای درک و می تواند کد شما را بسازد خواندنی تر
  • درک ها به طور کلی هستند سریعتر از استفاده از a for حلقه، به ویژه برای مجموعه داده های بزرگتر

با استفاده از dict() سازنده

این dict() سازنده در پایتون یک تابع داخلی است که برای تبدیل دنباله‌های جفت کلید-مقدار به اشیاء دیکشنری طراحی شده است. وقتی می گوییم “جفت های کلید-مقدار”، به یک ساختار دو عنصری اشاره می کنیم، که در آن عنصر اول کلید را نشان می دهد و عنصر دوم نشان دهنده مقدار مربوطه است.

در اینجا یک راهنمای گام به گام است روی چگونه می توانید از dict() سازنده برای تبدیل آرایه ای از جفت های تاپل به دیکشنری.

اول، اجازه دهید آرایه ای از تاپل ها ایجاد کنید. هر تاپل شامل دو عنصر است – کلید و مقدار:

array_of_tuples = (('John', 85), ('Alice', 90), ('Bob', 78))

بعد از آن استفاده خواهیم کرد dict() سازنده به آرایه تاپل ها را به دیکشنری تبدیل کنید:

dictionary = dict(array_of_tuples)

این dict() تابع آرایه تاپل ها را می گیرد و دیکشنری جدیدی برمی گرداند که در آن هر تاپل به یک جفت کلید-مقدار تبدیل می شود. برای تأیید اینکه تبدیل به درستی انجام شده است، می توانید print فرهنگ لغت حاصل:

print(dictionary)

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

{'John': 85, 'Alice': 90, 'Bob': 78}

این تأیید می کند که آرایه تاپل های ما با موفقیت به یک فرهنگ لغت تبدیل شده است.

توجه داشته باشید: مهم است که به یاد داشته باشید که فرهنگ لغت در پایتون نمی تواند کلیدهای تکراری داشته باشد. اگر آرایه تاپل های شما حاوی تاپل هایی با همان عنصر اول باشد، the dict() سازنده فقط آخرین تاپل را برای آن کلید در نظر می گیرد. بنابراین، هنگام آماده‌سازی جفت‌های تاپل خود، مطمئن شوید که هر کلید منحصر به فرد است تا از دست دادن ناخواسته داده‌ها جلوگیری شود.

مزایای استفاده از dict() سازنده برای تبدیل جفت های تاپل به دیکشنری:

  • با استفاده از dict() سازنده ساده و قابل درک است
  • این روش نیازی به کد اضافی ندارد و آن را به گزینه ای سریع و راحت برای تبدیل جفت های تاپل به دیکشنری تبدیل می کند.

استفاده از حلقه For

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

در اینجا، روش استفاده از a را نشان خواهیم داد for حلقه برای تکرار دستی روی آرایه ای از تاپل ها و تبدیل آن به فرهنگ لغت. این روش می تواند به ویژه زمانی مفید باشد که شما نیاز به پیاده سازی منطق پیچیده تری در طول تبدیل دارید process.

مانند قبل، شروع می کنیم تعریف آرایه ای از تاپل ها، با هر تاپل حاوی یک کلید و یک مقدار:

array_of_tuples = (('John', 85), ('Alice', 90), ('Bob', 78))

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

dictionary = {}

اکنون از a استفاده خواهیم کرد for حلقه برای تکرار روی آرایه تاپل های ما. در هر تکرار، کلید و مقدار را از تاپل فعلی استخراج کرده و به فرهنگ لغت خود اضافه می کنیم:

for pair in array_of_tuples:
    key = pair(0)
    value = pair(1)
    dictionary(key) = value

این حلقه از هر تاپل در آرایه عبور می کند. اولین عنصر تاپل را به متغیر اختصاص می دهد key و عنصر دوم به value. سپس این جفت کلید-مقدار را به فرهنگ لغت اضافه می کند.

در نهایت، اجازه دهید print فرهنگ لغت ما برای تأیید موفقیت آمیز بودن تبدیل.

print(dictionary)

خروجی باید این باشد:

{'John': 85, 'Alice': 90, 'Bob': 78}

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

مزایای استفاده از for حلقه:

  • با استفاده از a for حلقه به شما امکان می دهد اضافه کنید منطق یا سفارشی سازی پیچیده تر به تبدیل process در صورت نیاز
  • این روش ممکن است آشناتر و راحت تر برای برنامه نویسانی که هنوز به درک فرهنگ لغت تسلط ندارند

مدیریت کلیدهای تکراری

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

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

اما ابتدا، بیایید لیست زیر از جفت‌های تاپل را در نظر بگیریم:

tuple_pairs = (('a', 1), ('b', 2), ('a', 3), ('c', 4))

اگر می‌خواهید با استفاده از این فهرست را به فرهنگ لغت تبدیل کنید dict() تابع، پایتون فقط آخرین مقدار را برای کلید نگه می دارد 'a':

dict_pairs = dict(tuple_pairs)
print(dict_pairs)  

همانطور که می بینید، ارزش 1 مرتبط با کلید 'a' توسط مقدار بازنویسی شد 3.

در بعضی موارد، ممکن است با رفتار پیش‌فرض پایتون برای حفظ آخرین مقدار برای یک کلید معین مشکلی نداشته باشید. اگر اولین مقدار مرتبط با یک کلید مهم ترین است، می توانید لیست تاپل ها را قبل از تبدیل معکوس کنید:

tuple_pairs.reverse()
dict_pairs = dict(tuple_pairs)
print(dict_pairs)  

اگه نیاز داشتی به تمام ارزش ها را حفظ کنید، می توانید تبدیل را تغییر دهید process برای ایجاد یک فرهنگ لغت که در آن هر کلید دارای لیستی از مقادیر است:

dict_pairs = {}
for k, v in tuple_pairs:
    dict_pairs.setdefault(k, ()).append(v)

print(dict_pairs)  

در این مورد، setdefault() بررسی می کند که آیا یک کلید از قبل در فرهنگ لغت وجود دارد یا خیر. اگر اینطور باشد، مقدار آن کلید را برمی گرداند. اگر اینطور نیست، کلید را با یک مقدار پیش‌فرض به دیکشنری اضافه می‌کند، در این مورد، یک لیست خالی. سپس مقدار را اضافه می کند v به لیست مرتبط با کلید k.

در برخی موارد دیگر، ممکن است بخواهید یک تابع برای کنترل کلیدهای تکراری اعمال کنید. این می تواند باشد max()، min()، sum()، یا هر عملکرد داخلی یا سفارشی دیگری. در زیر مثالی وجود دارد که در آن ما از sum برای مدیریت کلیدهای تکراری استفاده می کنیم:

from collections import defaultdict

dict_pairs = defaultdict(int)
for k, v in tuple_pairs:
    
    dict_pairs(k) += v

print(dict_pairs)  

در این مورد استفاده می کنیم defaultdict() از collections ماژول برای مقداردهی اولیه یک فرهنگ لغت که به طور خودکار یک مقدار پیش فرض را به کلیدهای جدید اختصاص می دهد. استدلال به defaultdict() تابعی است که مقدار پیش فرض را برمی گرداند. در این مورد، int() برمی گرداند 0. سپس، برای هر تاپل در tuple_pairs، ارزش را اضافه می کنیم v به مقداری که قبلاً با کلید مرتبط است k که در dict_pairs.

رسیدگی به استثناها

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

بیایید لیست زیر از جفت های تاپل را در نظر بگیریم:

tuple_pairs = (('a', 1), ('b', 2), ('c',))

اگر سعی می کنید با استفاده از این فهرست را به فرهنگ لغت تبدیل کنید dict() تابع، پایتون یک را افزایش می دهد ValueError:

try:
    dict_pairs = dict(tuple_pairs)
except ValueError as e:
    print(f"Error: {e}")

که خروجی زیر را به ما می دهد:

Error: dictionary update sequence element #2 has length 1; 2 is required

در این مثال از a استفاده می کنیم try-except مسدود کردن برای گرفتن ValueError. وقتی پایتون با خطا در try بلوک، اجرای کد را در آن بلوک متوقف می کند و به سمت بلوک می رود except مسدود کردن. این به برنامه شما اجازه می دهد تا به جای پایان غیرمنتظره، خطا را به خوبی مدیریت کند.

برای مدیریت داده‌های نامعتبر، می‌توانید هر تاپل را قبل از افزودن به فرهنگ لغت بررسی کنید:

dict_pairs = {}
for pair in tuple_pairs:
    try:
        k, v = pair
        dict_pairs(k) = v
    except ValueError as e:
        print(f"Skipping invalid pair {pair}: {e}")

print(dict_pairs)  

این منجر به:

Skipping invalid pair ('c',): not enough values to unpack (expected 2, got 1)
{'a': 1, 'b': 2}

در این مورد از a استفاده می کنیم try-except بلوک در داخل حلقه for. برای هر جفت، سعی می کنیم جفت را در متغیرها باز کنیم k و v. اگر جفت دقیقاً دو عنصر نداشته باشد، پایتون a را بالا می‌برد ValueError، که با چاپ یک پیغام خطا و پرش به جفت بعدی آن را می گیریم و رسیدگی می کنیم.

برای سناریوهای پیچیده تر، حتی می توانید یک تابع سفارشی ایجاد کنید تا تأیید کنید که هر جفت تاپل دارای فرمت صحیح است:

tuple_pairs = (('John', 85), ('Alice', 90), ('Bob', 'seventy-eight'), (None, 72))


def valid_key_value_pair(pair):
    
    
    
    return isinstance(pair, tuple) and len(pair) == 2 and isinstance(pair(0), str) and isinstance(pair(1), (int, float))

student_grades = {}
for pair in tuple_pairs:
 try:
     if valid_key_value_pair(pair):
         key, value = pair
         student_grades(key) = value
     else:
         raise ValueError("Invalid tuple pair format")
 except ValueError as e:
     print(f"Error: {e}, skipping pair: {pair}")

print(student_grades)

خروجی:

Error: Invalid tuple pair format, skipping pair: ('Bob', 'seventy-eight')
Error: Invalid tuple pair format, skipping pair: (None, 72)
{'John': 85, 'Alice': 90}

به یاد داشته باشید، استثناها همیشه خطا نیستند. آنها همچنین به عنوان نوعی سیگنال برای نشان دادن شرایط خاص یا موقعیت هایی که نیاز به رسیدگی ویژه دارند استفاده می شوند. با استفاده از استثناها، می‌توانیم طیف وسیعی از موقعیت‌ها را مدیریت کنیم و اطمینان حاصل کنیم که برنامه ما حتی زمانی که با داده‌های غیرمنتظره‌ای مواجه می‌شود، رفتار قابل پیش‌بینی دارد.

نتیجه

تاپل ها و دیکشنری ها ساختارهای داده ای همه کاره هستند که هر کدام مزایا و موارد استفاده منحصر به فرد خود را دارند. تبدیل جفت‌های تاپل به دیکشنری می‌تواند چندین مزیت مانند جستجوی سریع‌تر، دسترسی بصری‌تر به داده‌ها و انعطاف‌پذیری بیشتر را ارائه دهد.

در این مقاله روش‌های مختلفی را برای تبدیل جفت‌های تاپل به دیکشنری در پایتون نشان دادیم، از جمله درک دیکشنری، dict() سازنده، و for حلقه ها هر روشی مزایای خاص خود را دارد و انتخاب مناسب بستگی به آن دارد روی نیازهای خاص شما ما همچنین کنترل کلیدهای تکراری و استثناها را پوشش دادیم تا مطمئن شویم کد شما قوی تر است.

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



منتشر شده در 1402-12-31 18:42:04

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

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

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