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

سرور مجازی NVMe

روش ادغام دو دیکشنری در پایتون

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


معرفی

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

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

ادغام دیکشنری ها در پایتون

ادغام ها معمولاً از راست به چپ اتفاق می افتد dict_a <- dict_b. وقتی یک نگهدارنده کلید مشترک در هر دو فرهنگ لغت وجود دارد، مقدار فرهنگ لغت دوم، مقدار فرهنگ لغت اول را بازنویسی می کند.

این را می توان در تصویر زیر نشان داد، جایی که اجزای فرهنگ لغت B به A ادغام می شوند و لباس سبز فرهنگ لغت B جای لباس نارنجی را می گیرد:

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

در طول این مقاله از دیکشنری های زیر استفاده خواهیم کرد.

  • فرهنگ لغت با مقادیر:
>>> a = {1:'peanut', 2:'butter', 3:'jelly', 4:'time'}
>>> b = {1:'fish', 2:'chips'}
  • فرهنگ لغت با مقادیر تو در تو:
>>> c = {1: ('peanut','butter','jelly','time'), 2:('fish','chips')}
>>> d = {1: ('fish','chips'), 2:('peanut','butter','jelly','time')}

با استفاده از عملگر Merge | (پایتون 3.9 و بالاتر)

از نسخه 3.9 پایتون به بعد، می‌توانیم از عملگرهای ادغام (که توسط | ) برای ترکیب دو فرهنگ لغت:

>>> x = a | b
>>> print(x)
{1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}

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

>>> y = c | d
>>> print(y)
{1: ('fish', 'chips'), 2: ('peanut', 'butter', 'jelly', 'time')}

استفاده از Dict Unpacking (Python 3 و بالاتر)

برای نسخه‌های قبلی پایتون 3، متأسفانه نمی‌توانیم از عملگرهای ادغام استفاده کنیم. در عوض، می‌توانیم با باز کردن هر دو دیکشنری، با استفاده از ادغام شوند ** دو ستاره، داخل فرهنگ لغت دیگر:

>>> x = {**a, **b}
>>> print(x)
{1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}

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

>>> y = {**c, **d}
>>> print(y)
{1: ('fish', 'chips'), 2: ('peanut', 'butter', 'jelly', 'time')}

پایتون 2 و بالاتر

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

ما همچنین می توانیم استفاده کنیم copy() و update() روش های فرهنگ لغت در نهایت، می‌توانیم آیتم‌های یک فرهنگ لغت را حلقه بزنیم و از آن استفاده کنیم extend() روش اضافه کردن آن به فرهنگ لغت دیگر

استفاده کردن موارد()

بیایید با ترکیب شروع کنیم items():

>>> x = dict(a.items() + b.items())
>>> print(x)
{1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}

نحو بالا برای مقادیر ساده مناسب است. برای یک فرهنگ لغت تودرتو حاوی مقادیر لیست، items() تماس باید به a فرستاده شود list() و سپس ترکیب شد:

>>> y = dict(list(c.items()) + list(d.items()))
>>> print(y)
{1: ('fish', 'chips'), 2: ('peanut', 'butter', 'jelly', 'time')}

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

استفاده از دیکشنری به روز رسانی()

راه دیگر برای انجام ادغام، کپی کردن یکی از دیکشنری ها و به روز رسانی آن با دیگری است:

>>> x = a.copy()
>>> x.update(b)
>>> print (x)
{1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}

افزودن مقادیر لیست در تمام نسخه های پایتون

در بخش‌های قبلی، مقادیر تودرتوی دیکشنری‌های ادغام شده را بازنویسی کرده‌ایم. مواردی وجود دارد که مقادیر تو در تو به جای بازنویسی باید اضافه شوند. این را می توان با استفاده از extend() روش:

>>> for k, v in d.items():
...    if k in c:
...        c(k).extend(v)
...    else:
...       c(k) = v
>>>
>>> print(c)
{1: ('peanut', 'butter', 'jelly', 'time', 'fish', 'chips'), 2: ('fish', 'chips', 'peanut', 'butter', 'jelly')}

نتیجه

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

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



منتشر شده در 1403-01-14 00:11:05

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

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

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