دیکشنری ها در پایتون
فهرست عناوین
- دسترسی به آیتمهای موجود در یک دیکشنری در پایتون (Access Dictionary Items)
- دیکشنری در پایتون - تغییر آیتم ها (Change Dictionary Items)
- اضافه کردن آیتم های جدید (Add Dictionary Items)
- حذف آیتم ها در دیکشنری (Remove Dictionary Items)
- پیمایش از روی آیتم ها با استفاده از حلقه در دیکشنری (Loop Dictionaries)
- کپی کردن دیکشنری ها (Copy Dictionaries)
- دیکشنری های تو در تو (Nested Dictionaries)
- متدهای موجود در دیکشنری
- تمرین
دیکشنری در پایتون یکی از ساختارهای دادهای پرکاربرد است که برای ذخیرهسازی دادهها به شکل کلید-مقدار (Key-Value) استفاده میشود. به زبان ساده، دیکشنری شبیه به یک دفترچه تلفن است که در آن میتوانید هر شماره تلفن (مقدار) را به یک نام (کلید) نسبت دهید.
حالا بیایید ویژگیهای کلیدی دیکشنریها رو به زبان ساده بررسی کنیم:
1. Ordered (ترتیبدار) از پایتون 3.7 به بعد
در نسخههای پایتون 3.7 به بعد، دیکشنریها به صورت پیشفرض ترتیبدار شدهاند. این یعنی اگر شما دادهها را به ترتیبی وارد کنید، وقتی دوباره آنها را از دیکشنری بخوانید، همان ترتیب حفظ میشود. مثلاً اگر این دیکشنری را بسازید:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
اگر این دیکشنری را چاپ کنید، به همان ترتیب که دادهها وارد شدهاند نمایش داده میشود:
print(my_dict) # {'name': 'Alice', 'age': 25, 'city': 'New York'}
قبل از نسخه 3.7، ترتیب ذخیرهسازی در دیکشنریها تضمینی نبود.
2. Changeable (قابل تغییر)
دیکشنریها قابل تغییر هستند، یعنی بعد از ایجاد آنها، میتوانید مقدارهای موجود را تغییر دهید، کلیدهای جدید اضافه کنید، یا کلیدهای قبلی را حذف کنید. به عنوان مثال:
my_dict['age'] = 30 # تغییر مقدار برای کلید 'age'
my_dict['country'] = 'USA' # اضافه کردن کلید جدید
del my_dict['city'] # حذف کلید 'city'
بعد از این تغییرات، دیکشنری به این شکل خواهد بود:
{'name': 'Alice', 'age': 30, 'country': 'USA'}
3. No Duplicates (بدون کلیدهای تکراری)
در دیکشنریها کلیدهای تکراری مجاز نیستند. یعنی اگر دیکشنری شما دو کلید یکسان داشته باشد، آخرین مقداری که به آن کلید اختصاص دادهاید، جایگزین مقدار قبلی میشود. برای مثال:
my_dict = {'name': 'Alice', 'name': 'Bob'}
در این حالت، وقتی دیکشنری را چاپ کنید:
print(my_dict) # {'name': 'Bob'}
کلید 'name' فقط یک بار وجود دارد و مقدار آخرین تعریفشده برای آن کلید (در اینجا 'Bob') نگه داشته میشود.
دسترسی به آیتمهای موجود در یک دیکشنری در پایتون (Access Dictionary Items)
در پایتون برای دسترسی به آیتمهای موجود در یک دیکشنری، روشها و امکانات مختلفی وجود دارد. بیایید با این روشها آشنا شویم:
1. دسترسی به مقدار بر اساس کلید
سادهترین روش برای دسترسی به یک مقدار در دیکشنری، استفاده از نام کلید است. شما میتوانید با مشخص کردن کلید درون براکتها (`[]`) به مقدار مرتبط با آن کلید دسترسی پیدا کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
print(my_dict['name']) # خروجی: Alice
print(my_dict['age']) # خروجی: 25
نکته: اگر کلیدی که به دنبال آن هستید در دیکشنری وجود نداشته باشد، با استفاده از این روش، خطای KeyError رخ میدهد.
2. استفاده از متد get() برای دسترسی
متد `get()` یک روش ایمنتر برای دسترسی به مقدارهای دیکشنری است. اگر کلید وجود داشته باشد، مقدار آن بازگردانده میشود و اگر وجود نداشته باشد، شما میتوانید مقدار پیشفرضی تعریف کنید که در صورت عدم وجود کلید، به جای مقدار برگشت داده شود.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# دسترسی به کلید 'name'
print(my_dict.get('name')) # خروجی: Alice
# تلاش برای دسترسی به کلید 'city' که وجود ندارد
print(my_dict.get('city')) # خروجی: None
# استفاده از مقدار پیشفرض در صورت عدم وجود کلید
print(my_dict.get('city', 'Not Found')) # خروجی: Not Found
مزیت: متد get() باعث جلوگیری از خطای KeyError میشود و برای کار با کلیدهای نامطمئن بسیار مفید است.
3. دسترسی به تمام کلیدها با keys()
با استفاده از متد keys()، میتوانید به لیستی از تمام کلیدهای موجود در دیکشنری دسترسی پیدا کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
keys = my_dict.keys()
print(keys) # خروجی: dict_keys(['name', 'age', 'city'])
4. دسترسی به تمام مقادیر با values()
اگر میخواهید تمام مقادیر موجود در دیکشنری را ببینید، میتوانید از متد values() استفاده کنید که لیستی از مقادیر دیکشنری را باز میگرداند.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
values = my_dict.values()
print(values) # خروجی: dict_values(['Alice', 25, 'New York'])
5. دسترسی به جفتهای کلید-مقدار با items()
متد items() تمام جفتهای کلید-مقدار موجود در دیکشنری را به صورت یک لیست از تپلها برمیگرداند. هر تپل شامل یک کلید و مقدار مرتبط با آن است.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
items = my_dict.items()
print(items) # خروجی: dict_items([('name', 'Alice'), ('age', 25), ('city', 'New York')])
6. بررسی وجود یک کلید در دیکشنری با in
برای اینکه بررسی کنید آیا یک کلید خاص در دیکشنری وجود دارد یا نه، میتوانید از کلمه کلیدی `in` استفاده کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# بررسی وجود کلید 'name'
print('name' in my_dict) # خروجی: True
# بررسی وجود کلید 'city'
print('city' in my_dict) # خروجی: False
7. دسترسی به مقادیر با حلقه (Looping)
شما میتوانید از حلقه for برای دسترسی به کلیدها، مقادیر یا جفتهای کلید-مقدار استفاده کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# دسترسی به کلیدها
for key in my_dict:
print(key)
# دسترسی به مقدارهای مرتبط با کلیدها
for key in my_dict:
print(my_dict[key])
# یا میتوانید از `items()` برای دسترسی به جفتهای کلید-مقدار استفاده کنید
for key, value in my_dict.items():
print(f'{key}: {value}')
دیکشنری در پایتون - تغییر آیتم ها (Change Dictionary Items)
در پایتون، دیکشنریها قابل تغییر هستند، یعنی شما میتوانید مقادیر کلیدهای موجود را تغییر دهید، کلیدهای جدید اضافه کنید یا کلیدهای موجود را حذف کنید. بیایید روشهای مختلف برای تغییر آیتمهای دیکشنری را بررسی کنیم.
1. تغییر مقدار مرتبط با یک کلید
شما میتوانید مقدار مرتبط با یک کلید موجود در دیکشنری را به سادگی تغییر دهید. کافی است کلید را مشخص کرده و مقدار جدیدی به آن اختصاص دهید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# تغییر مقدار کلید 'age'
my_dict['age'] = 30
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 30, 'city': 'New York'}
در این مثال، مقدار کلید age از 25 به 30 تغییر کرده است.
2. اضافه کردن کلید-مقدار جدید به دیکشنری
شما میتوانید کلید-مقدارهای جدیدی به دیکشنری اضافه کنید. برای این کار، به سادگی یک کلید جدید به دیکشنری اضافه کرده و مقدار مرتبط با آن را تنظیم کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# اضافه کردن کلید 'city'
my_dict['city'] = 'Los Angeles'
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 25, 'city': 'Los Angeles'}
در اینجا کلید city به دیکشنری اضافه شده است.
3. استفاده از متد update()
متد update() به شما اجازه میدهد تا چندین کلید-مقدار را به صورت همزمان به دیکشنری اضافه یا تغییر دهید. این متد میتواند به دیکشنریهای موجود آیتمهای جدید اضافه کند یا آیتمهای موجود را بهروزرسانی کند.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# اضافه یا بهروزرسانی آیتمها با استفاده از update()
my_dict.update({'age': 28, 'city': 'Chicago', 'job': 'Developer'})
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 28, 'city': 'Chicago', 'job': 'Developer'}
در این مثال:
- مقدار age از 25 به 28 تغییر کرده.
- کلیدهای جدید city و job به دیکشنری اضافه شدهاند.
4. حذف آیتمها از دیکشنری
a. حذف با استفاده از del
شما میتوانید از کلمه کلیدی `del` برای حذف یک آیتم خاص (یعنی یک کلید و مقدار مرتبط با آن) استفاده کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# حذف کلید 'city'
del my_dict['city']
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 25}
در اینجا کلید city و مقدار مرتبط با آن حذف شده است.
b. حذف با استفاده از متد pop()
متد `pop()` هم مشابه `del` عمل میکند اما همچنین مقدار حذفشده را برمیگرداند. این متد برای حذف آیتمها و در عین حال استفاده از مقدار حذفشده مفید است.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# حذف کلید 'age' و دریافت مقدار آن
age = my_dict.pop('age')
print(age) # خروجی: 25
print(my_dict) # {'name': 'Alice', 'city': 'New York'}
c. حذف همه آیتمها با clear()
اگر بخواهید تمامی آیتمهای دیکشنری را یکباره حذف کنید، میتوانید از متد clear() استفاده کنید که دیکشنری را کاملاً خالی میکند.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# خالی کردن دیکشنری
my_dict.clear()
print(my_dict)
خروجی:
{}
در اینجا دیکشنری خالی شده و دیگر هیچ آیتمی ندارد.
5. تغییر کلیدها در دیکشنری
در پایتون به طور مستقیم نمیتوان کلیدهای موجود در دیکشنری را تغییر داد. برای تغییر کلیدها باید کلید قدیمی را حذف کرده و کلید جدید را با مقدار مربوطه اضافه کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# تغییر کلید 'name' به 'first_name'
my_dict['first_name'] = my_dict.pop('name')
print(my_dict)
خروجی:
{'age': 25, 'first_name': 'Alice'}
در اینجا کلید name به first_name تغییر کرده است.
اضافه کردن آیتم های جدید (Add Dictionary Items)
برای اضافه کردن آیتمهای جدید به یک دیکشنری در پایتون، شما میتوانید به سادگی یک کلید جدید به دیکشنری اضافه کنید و مقدار مرتبط با آن را مشخص کنید.
1. اضافه کردن یک کلید-مقدار جدید
سادهترین روش برای اضافه کردن یک آیتم به دیکشنری، مشخص کردن کلید جدید در براکتها (`[]`) و اختصاص دادن یک مقدار به آن است.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# اضافه کردن کلید 'city'
my_dict['city'] = 'New York'
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 25, 'city': 'New York'}
در اینجا یک کلید جدید به نام city به دیکشنری اضافه شده و مقدار New York به آن اختصاص داده شده است.
2. اضافه کردن چندین آیتم با استفاده از متد update()
متد update() به شما امکان میدهد که چندین آیتم جدید را به دیکشنری اضافه کنید یا مقادیر کلیدهای موجود را بهروزرسانی کنید. این متد بسیار مفید است اگر بخواهید چندین کلید-مقدار را به صورت همزمان اضافه کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# اضافه کردن چندین کلید-مقدار جدید
my_dict.update({'city': 'Los Angeles', 'job': 'Engineer'})
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 25, 'city': 'Los Angeles', 'job': 'Engineer'}
در این مثال:
- کلید city با مقدار Los Angeles اضافه شده است.
- کلید job با مقدار Engineer نیز به دیکشنری اضافه شده است.
3. اضافه کردن آیتمها از دیکشنری دیگر با update()
شما میتوانید از متد update() برای اضافه کردن آیتمهای دیکشنری دیگر به دیکشنری فعلی استفاده کنید. این روش به شما امکان میدهد که دادههای دو دیکشنری را ترکیب کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
new_items = {'city': 'Chicago', 'job': 'Data Scientist'}
# اضافه کردن آیتمهای دیکشنری دیگر
my_dict.update(new_items)
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 25, 'city': 'Chicago', 'job': 'Data Scientist'}
در اینجا، آیتمهای موجود در دیکشنری new_items به دیکشنری my_dict اضافه شدهاند.
4. استفاده از حلقه برای اضافه کردن آیتمها به دیکشنری
گاهی ممکن است بخواهید چندین کلید-مقدار را به صورت تکراری به دیکشنری اضافه کنید. این کار را میتوانید با استفاده از حلقه انجام دهید.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
new_items = [('city', 'San Francisco'), ('job', 'Developer')]
# اضافه کردن آیتمها با استفاده از حلقه
for key, value in new_items:
my_dict[key] = value
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 25, 'city': 'San Francisco', 'job': 'Developer'}
در این مثال، با استفاده از حلقه، آیتمهای جدید از لیستی از تپلها به دیکشنری اضافه شدهاند.
5. اضافه کردن مقدار به یک کلید موجود
اگر کلیدی که اضافه میکنید از قبل در دیکشنری وجود داشته باشد، مقدار آن بهروزرسانی میشود. این یعنی اگر کلید تکراری وارد کنید، آخرین مقدار آن نگه داشته خواهد شد.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# اضافه کردن کلید 'age' با مقدار جدید
my_dict['age'] = 30
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 30}
در اینجا، مقدار کلید age از 25 به 30 تغییر یافته است.
حذف آیتم ها در دیکشنری (Remove Dictionary Items)
برای حذف آیتمها از دیکشنری در پایتون، چندین روش مختلف وجود دارد که هر کدام برای موقعیتهای خاصی کاربرد دارند. شما میتوانید یک آیتم خاص را حذف کنید، مقدار حذفشده را دریافت کنید، یا تمامی آیتمهای دیکشنری را به یکباره پاک کنید.
1. حذف آیتم با استفاده از del
کلمه کلیدی del یکی از سادهترین روشها برای حذف یک آیتم خاص از دیکشنری است. با استفاده از این دستور، کلید و مقدار مرتبط با آن حذف میشوند.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# حذف کلید 'city'
del my_dict['city']
print(my_dict)
خروجی:
{'name': 'Alice', 'age': 25}
در اینجا کلید city و مقدار مرتبط با آن از دیکشنری حذف شدهاند.
2. حذف آیتم با استفاده از pop()
متد pop() برای حذف یک کلید خاص استفاده میشود، با این تفاوت که این متد مقدار حذفشده را به شما برمیگرداند. اگر کلید موجود نباشد، میتوانید یک مقدار پیشفرض مشخص کنید تا از خطا جلوگیری کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# حذف کلید 'age' و دریافت مقدار آن
age = my_dict.pop('age')
print(age) # خروجی: 25
print(my_dict) # {'name': 'Alice', 'city': 'New York'}
در این مثال، کلید age از دیکشنری حذف شده و مقدار 25 به عنوان خروجی pop() برگردانده میشود.
استفاده از pop() با مقدار پیشفرض:
اگر کلید مورد نظر در دیکشنری وجود نداشته باشد، میتوانید مقدار پیشفرضی به `pop()` بدهید تا از بروز خطا جلوگیری شود.
my_dict = {'name': 'Alice'}
# حذف کلیدی که وجود ندارد، با مقدار پیشفرض
result = my_dict.pop('age', 'Key not found')
print(result) # خروجی: 'Key not found'
3. حذف آخرین آیتم با استفاده از popitem()
متد popitem() آخرین آیتمی که به دیکشنری اضافه شده را حذف و مقدار آن را به صورت یک تپل (کلید، مقدار) برمیگرداند. این متد در دیکشنریهای نسخه 3.7 پایتون به بعد که دیکشنریها به صورت مرتب هستند، مفید است.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# حذف آخرین آیتم
last_item = my_dict.popitem()
print(last_item) # خروجی: ('city', 'New York')
print(my_dict) # {'name': 'Alice', 'age': 25}
در اینجا آخرین آیتم، یعنی کلید city و مقدار New York، حذف شده و دیکشنری بهروزرسانی شده است.
4. حذف همه آیتمها با استفاده از clear()
متد clear() تمام آیتمهای دیکشنری را به یکباره حذف میکند و دیکشنری خالی باقی میماند.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# خالی کردن دیکشنری
my_dict.clear()
print(my_dict)
خروجی:
{}
در این مثال، تمامی آیتمهای دیکشنری حذف شده و دیکشنری خالی است.
5. حذف دیکشنری با del
اگر بخواهید کل دیکشنری را به صورت کامل حذف کنید (نه فقط آیتمهای داخل آن)، میتوانید از `del` برای حذف دیکشنری استفاده کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# حذف کامل دیکشنری
del my_dict
# تلاش برای دسترسی به دیکشنری حذف شده منجر به خطا میشود
# print(my_dict) # NameError: name 'my_dict' is not defined
پیمایش از روی آیتم ها با استفاده از حلقه در دیکشنری (Loop Dictionaries)
برای پیمایش از روی آیتمهای دیکشنری در پایتون(Looping through dictionaries)، چندین روش وجود دارد که شما میتوانید بسته به نیاز خود از آنها استفاده کنید. این روشها به شما امکان میدهند تا روی کلیدها، مقادیر یا هر دو به طور همزمان پیمایش کنید. بیایید این روشها را با مثال بررسی کنیم.
1. پیمایش روی کلیدهای دیکشنری
به طور پیشفرض، زمانی که شما از یک حلقه `for` برای پیمایش یک دیکشنری استفاده میکنید، فقط کلیدهای دیکشنری را دریافت میکنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# پیمایش روی کلیدها
for key in my_dict:
print(key)
خروجی:
name
age
city
در این مثال، حلقه روی کلیدهای دیکشنری پیمایش میکند و هر کلید را چاپ میکند.
2. پیمایش روی مقادیر دیکشنری
برای پیمایش روی مقادیر دیکشنری، میتوانید از متد values() استفاده کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# پیمایش روی مقادیر
for value in my_dict.values():
print(value)
خروجی:
Alice
25
New York
در اینجا، حلقه روی مقادیر دیکشنری پیمایش میکند و هر مقدار را چاپ میکند.
3. پیمایش روی کلیدها و مقادیر با استفاده از items()
برای پیمایش روی کلیدها و مقادیر به طور همزمان، میتوانید از متد `items()` استفاده کنید. این متد یک لیست از تپلها (کلید، مقدار) را برمیگرداند که میتوانید در حلقه از آن استفاده کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# پیمایش روی کلیدها و مقادیر
for key, value in my_dict.items():
print(f"Key: {key}, Value: {value}")
خروجی:
Key: name, Value: Alice
Key: age, Value: 25
Key: city, Value: New York
در این مثال، حلقه همزمان روی کلید و مقدار پیمایش میکند و هر دو را چاپ میکند.
4. پیمایش با استفاده از keys()
متد keys() به شما امکان میدهد تا به وضوح فقط کلیدهای دیکشنری را پیمایش کنید، اگرچه به طور پیشفرض هم کلیدها پیمایش میشوند.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# پیمایش روی کلیدها با استفاده از keys()
for key in my_dict.keys():
print(key)
خروجی:
name
age
city
این مثال مشابه پیمایش اولیه روی کلیدها است، با این تفاوت که به صورت مشخص از keys() استفاده شده است.
5. استفاده از enumerate() برای دسترسی به ایندکسها
اگر بخواهید علاوه بر کلیدها و مقادیر، به ایندکس آیتمها نیز دسترسی داشته باشید، میتوانید از تابع enumerate() استفاده کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# استفاده از enumerate برای دریافت ایندکس
for index, (key, value) in enumerate(my_dict.items()):
print(f"Index: {index}, Key: {key}, Value: {value}")
خروجی:
Index: 0, Key: name, Value: Alice
Index: 1, Key: age, Value: 25
Index: 2, Key: city, Value: New York
در این مثال، علاوه بر کلیدها و مقادیر، ایندکس (شماره هر آیتم) نیز نمایش داده میشود.
6. پیمایش دیکشنریهای تو در تو (Nested Dictionaries)
گاهی ممکن است دیکشنریها تو در تو (Nested) باشند. در این صورت میتوانید به کمک حلقههای تو در تو، روی تمامی آیتمها پیمایش کنید.
مثال:
nested_dict = {
'person1': {'name': 'Alice', 'age': 25},
'person2': {'name': 'Bob', 'age': 30}
}
# پیمایش روی دیکشنریهای تو در تو
for person, info in nested_dict.items():
print(f"{person}:")
for key, value in info.items():
print(f" {key}: {value}")
خروجی:
person1:
name: Alice
age: 25
person2:
name: Bob
age: 30
در این مثال، حلقه به طور همزمان روی دیکشنریهای تو در تو پیمایش میکند و کلیدها و مقادیر داخلی را نیز نمایش میدهد.
کپی کردن دیکشنری ها (Copy Dictionaries)
در پایتون، چندین روش برای کپی کردن دیکشنریها وجود دارد. اگر بخواهید یک کپی کامل از دیکشنری ایجاد کنید، باید از روشهای مناسب استفاده کنید تا از مشکلاتی مانند تغییرات ناخواسته در دیکشنری اصلی جلوگیری شود.
1. کپی کردن دیکشنری در پایتون با استفاده از copy()
متد copy() یک کپی سطحی (shallow copy) از دیکشنری ایجاد میکند. این بدان معنی است که اگر دیکشنری شما شامل مقادیر ساده (مانند اعداد یا رشتهها) باشد، این روش به خوبی کار میکند. اما اگر دیکشنری شامل دادههای پیچیدهتر مثل دیکشنریهای تو در تو باشد، این روش فقط کپی سطح اول را انجام میدهد و دادههای تو در تو همچنان به دیکشنری اصلی ارجاع دارند.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# کپی کردن دیکشنری
copy_dict = my_dict.copy()
# تغییرات روی کپی تأثیری روی دیکشنری اصلی ندارد
copy_dict['age'] = 30
print("Original:", my_dict)
print("Copy:", copy_dict)
خروجی:
Original: {'name': 'Alice', 'age': 25, 'city': 'New York'}
Copy: {'name': 'Alice', 'age': 30, 'city': 'New York'}
در این مثال، دیکشنری اصلی تحت تأثیر تغییرات در دیکشنری کپیشده قرار نگرفته است.
2. کپی کردن با استفاده از dict()
شما همچنین میتوانید از تابع dict() برای کپی کردن دیکشنری استفاده کنید. این روش مشابه متد copy() عمل میکند و یک کپی سطحی ایجاد میکند.
مثال:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# کپی کردن با استفاده از dict()
copy_dict = dict(my_dict)
# اعمال تغییرات در کپی
copy_dict['city'] = 'Los Angeles'
print("Original:", my_dict)
print("Copy:", copy_dict)
خروجی:
Original: {'name': 'Alice', 'age': 25, 'city': 'New York'}
Copy: {'name': 'Alice', 'age': 25, 'city': 'Los Angeles'}
در اینجا نیز دیکشنری کپیشده مستقل از دیکشنری اصلی است.
3. کپی عمیق با استفاده از deepcopy()
اگر دیکشنری شما شامل دادههای تو در تو (مثل لیستها یا دیکشنریهای دیگر) باشد، باید از کپی عمیق استفاده کنید. برای این منظور، میتوانید از تابع deepcopy() از ماژول copy استفاده کنید. این تابع تمامی سطوح دیکشنری را کپی میکند و تضمین میکند که هیچ ارجاعی به دیکشنری اصلی وجود نداشته باشد.
مثال:
import copy
my_dict = {
'name': 'Alice',
'age': 25,
'details': {'city': 'New York', 'job': 'Engineer'}
}
# کپی عمیق
deep_copy_dict = copy.deepcopy(my_dict)
# تغییر در دیکشنری تو در توی کپیشده
deep_copy_dict['details']['city'] = 'Los Angeles'
print("Original:", my_dict)
print("Deep Copy:", deep_copy_dict)
خروجی:
Original: {'name': 'Alice', 'age': 25, 'details': {'city': 'New York', 'job': 'Engineer'}}
Deep Copy: {'name': 'Alice', 'age': 25, 'details': {'city': 'Los Angeles', 'job': 'Engineer'}}
4. کپی مستقیم با استفاده از عملگر =
استفاده از عملگر = برای کپی کردن دیکشنری در واقع یک ارجاع به دیکشنری اصلی ایجاد میکند و هیچ کپی مستقلی انجام نمیدهد. هر تغییری که در دیکشنری جدید اعمال شود، روی دیکشنری اصلی هم اعمال خواهد شد.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# کپی با استفاده از عملگر '=' (فقط ارجاع است)
copy_dict = my_dict
# تغییر در دیکشنری کپیشده
copy_dict['age'] = 30
print("Original:", my_dict)
print("Copy:", copy_dict)
خروجی:
Original: {'name': 'Alice', 'age': 30}
Copy: {'name': 'Alice', 'age': 30}
در اینجا مشاهده میکنید که هر دو دیکشنری تغییر کردهاند، زیرا در واقع هر دو به یک دیکشنری اشاره دارند.
دیکشنری های تو در تو (Nested Dictionaries)
دیکشنریهای تو در تو (Nested Dictionaries) در پایتون، دیکشنریهایی هستند که یک یا چند دیکشنری دیگر به عنوان مقدار (value) درون آنها ذخیره شدهاند. به عبارت دیگر، هر دیکشنری میتواند به عنوان یک مقدار در یک دیکشنری بزرگتر ذخیره شود. این روش به شما اجازه میدهد تا دادههای پیچیدهتری را به صورت سلسله مراتبی و ساختاریافته ذخیره کنید.
ساختار دیکشنری تو در تو
یک دیکشنری تو در تو به این صورت است که هر کلید میتواند به یک دیکشنری دیگر به عنوان مقدار اشاره کند. شما میتوانید این دیکشنریها را به هر عمقی که نیاز دارید ایجاد کنید.
مثال ساده:
nested_dict = {
'person1': {
'name': 'Alice',
'age': 25,
'city': 'New York'
},
'person2': {
'name': 'Bob',
'age': 30,
'city': 'Los Angeles'
}
}
print(nested_dict)
خروجی:
{
'person1': {'name': 'Alice', 'age': 25, 'city': 'New York'},
'person2': {'name': 'Bob', 'age': 30, 'city': 'Los Angeles'}
}
در این مثال، دیکشنری اصلی دو کلید دارد (person1 و person2)، و هر کدام از این کلیدها به یک دیکشنری دیگر که حاوی اطلاعات مربوط به افراد است اشاره میکند.
دسترسی به آیتمهای دیکشنری تو در تو
برای دسترسی به مقادیر دیکشنری تو در تو، شما باید از کلیدهای مربوطه به ترتیب استفاده کنید.
مثال:
# دسترسی به نام فرد اول
print(nested_dict['person1']['name']) # خروجی: Alice
# دسترسی به سن فرد دوم
print(nested_dict['person2']['age']) # خروجی: 30
تغییر مقادیر در دیکشنری تو در تو
شما میتوانید به راحتی مقادیر درون دیکشنریهای تو در تو را تغییر دهید.
مثال:
# تغییر نام فرد دوم
nested_dict['person2']['name'] = 'Charlie'
print(nested_dict['person2']['name']) # خروجی: Charlie
اضافه کردن دیکشنری جدید در دیکشنری تو در تو
شما میتوانید دیکشنریهای جدید را به دیکشنری تو در تو اضافه کنید.
مثال:
# اضافه کردن فرد سوم به دیکشنری
nested_dict['person3'] = {
'name': 'David',
'age': 22,
'city': 'Chicago'
}
print(nested_dict)
خروجی:
{
'person1': {'name': 'Alice', 'age': 25, 'city': 'New York'},
'person2': {'name': 'Charlie', 'age': 30, 'city': 'Los Angeles'},
'person3': {'name': 'David', 'age': 22, 'city': 'Chicago'}
}
در این مثال، فرد جدیدی به دیکشنری اضافه شده است.
حذف آیتمها از دیکشنری تو در تو
شما میتوانید از روشهای معمولی پایتون مانند `del` برای حذف یک آیتم از دیکشنری تو در تو استفاده کنید.
مثال:
# حذف فرد اول از دیکشنری
del nested_dict['person1']
print(nested_dict)
خروجی:
{
'person2': {'name': 'Charlie', 'age': 30, 'city': 'Los Angeles'},
'person3': {'name': 'David', 'age': 22, 'city': 'Chicago'}
}
پیمایش روی دیکشنری تو در تو
برای پیمایش دیکشنری تو در تو، میتوانید از حلقههای تو در تو استفاده کنید.
مثال:
# پیمایش روی دیکشنری تو در تو
for person, info in nested_dict.items():
print(f"Information for {person}:")
for key, value in info.items():
print(f" {key}: {value}")
خروجی:
Information for person2:
name: Charlie
age: 30
city: Los Angeles
Information for person3:
name: David
age: 22
city: Chicago
در این مثال، ما روی دیکشنری تو در تو پیمایش کرده و اطلاعات هر فرد را به طور جداگانه نمایش دادیم.
متدهای موجود در دیکشنری
در پایتون، دیکشنریها شامل چندین متد هستند که به شما کمک میکنند تا عملیات مختلفی را بر روی دیکشنریها انجام دهید. در بخش آخر برخی از مهمترین متدهای دیکشنری و نحوه استفاده از آنها را توضیح میدهیم:
1. get(key[, default])
این متد به شما این امکان را میدهد که مقدار یک کلید خاص را دریافت کنید. اگر کلید در دیکشنری وجود نداشته باشد، مقدار پیشفرضی که میتوانید مشخص کنید را باز میگرداند.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# دریافت مقدار کلید 'name'
name = my_dict.get('name')
print(name) # خروجی: Alice
# دریافت مقدار کلید 'city' که وجود ندارد
city = my_dict.get('city', 'Not Found')
print(city) # خروجی: Not Found
2. keys()
این متد تمام کلیدهای موجود در دیکشنری را به صورت یک شیء dict_keys باز میگرداند.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# دریافت تمام کلیدها
keys = my_dict.keys()
print(keys) # خروجی: dict_keys(['name', 'age'])
3. values()
این متد تمام مقادیر موجود در دیکشنری را به صورت یک شیء dict_values باز میگرداند.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# دریافت تمام مقادیر
values = my_dict.values()
print(values) # خروجی: dict_values(['Alice', 25])
4. items()
این متد تمام جفتهای کلید و مقدار را به صورت یک شیء dict_items باز میگرداند.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# دریافت تمام جفتهای کلید و مقدار
items = my_dict.items()
print(items) # خروجی: dict_items([('name', 'Alice'), ('age', 25)])
5. update([other])
این متد دیکشنری جاری را با جفتهای کلید و مقدار از دیکشنری دیگر بهروز میکند. اگر کلیدی وجود داشته باشد، مقدار آن بهروزرسانی میشود.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
update_dict = {'age': 30, 'city': 'New York'}
# بهروزرسانی دیکشنری
my_dict.update(update_dict)
print(my_dict) # خروجی: {'name': 'Alice', 'age': 30, 'city': 'New York'}
6. pop(key[, default])
این متد مقدار کلیدی را که مشخص کردهاید حذف میکند و مقدار آن را برمیگرداند. اگر کلید وجود نداشته باشد، میتوانید یک مقدار پیشفرض نیز تعیین کنید.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# حذف کلید 'age'
age = my_dict.pop('age')
print(age) # خروجی: 25
print(my_dict) # خروجی: {'name': 'Alice'}
7. popitem()
این متد آخرین جفت کلید و مقدار را از دیکشنری حذف و آن را باز میگرداند. در دیکشنریهای پایتون 3.7 و بالاتر، ترتیب کلیدها حفظ میشود.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# حذف و دریافت آخرین جفت کلید و مقدار
item = my_dict.popitem()
print(item) # خروجی: ('age', 25)
print(my_dict) # خروجی: {'name': 'Alice'}
8. clear()
این متد تمام آیتمهای موجود در دیکشنری را حذف میکند و دیکشنری را خالی میکند.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# خالی کردن دیکشنری
my_dict.clear()
print(my_dict) # خروجی: {}
9. copy()
این متد یک کپی سطحی از دیکشنری جاری ایجاد میکند.
مثال:
my_dict = {'name': 'Alice', 'age': 25}
# کپی کردن دیکشنری
copy_dict = my_dict.copy()
print(copy_dict) # خروجی: {'name': 'Alice', 'age': 25}
10. setdefault(key[, default])
این متد مقدار یک کلید خاص را باز میگرداند. اگر کلید وجود نداشته باشد، آن را به مقدار پیشفرضی که مشخص کردهاید، اضافه میکند.
مثال:
my_dict = {'name': 'Alice'}
# دریافت یا اضافه کردن کلید 'age'
age = my_dict.setdefault('age', 25)
print(age) # خروجی: 25
print(my_dict) # خروجی: {'name': 'Alice', 'age': 25}
این متدها به شما کمک میکنند تا به راحتی با دیکشنری در پایتون کار کنید. از دسترسی به مقادیر گرفته تا اضافه کردن، بهروزرسانی و حذف آیتمها، این متدها به شما کنترل بیشتری بر روی دادهها میدهند.
تمرین
در اینجا 20 تمرین خلاقانه و ساده برای یادگیری دیکشنریها در پایتون آورده شده است. این تمرینها به شما کمک میکنند تا مفاهیم مختلف مرتبط با دیکشنریها را به خوبی درک کنید.
1. ایجاد یک دیکشنری ساده
یک دیکشنری بسازید که اطلاعات یک کتاب شامل عنوان، نویسنده، سال چاپ و تعداد صفحات را ذخیره کند. سپس این اطلاعات را چاپ کنید.
2. دسترسی به مقادیر دیکشنری
با استفاده از دیکشنری بالا، فقط نام نویسنده را چاپ کنید.
3. افزودن آیتم جدید به دیکشنری
به دیکشنری کتاب یک کلید جدید اضافه کنید که نشاندهندهی ژانر کتاب باشد و آن را مقداردهی کنید.
4. ویرایش مقدار یک کلید در دیکشنری
مقدار مربوط به تعداد صفحات را تغییر دهید و دوباره دیکشنری را چاپ کنید.
5. حذف یک کلید از دیکشنری
کلید ژانر را از دیکشنری کتاب حذف کنید و دیکشنری را چاپ کنید.
6. چک کردن وجود یک کلید در دیکشنری
بررسی کنید که آیا کلیدی به نام 'ناشر' در دیکشنری کتاب وجود دارد یا خیر.
7. پیمایش در کلیدهای دیکشنری
یک حلقه بنویسید که از طریق کلیدهای دیکشنری کتاب پیمایش کرده و هر کلید را چاپ کند.
8. پیمایش در مقادیر دیکشنری
یک حلقه بنویسید که از طریق مقادیر دیکشنری کتاب پیمایش کرده و هر مقدار را چاپ کند.
9. دیکشنری در دیکشنری
یک دیکشنری بسازید که اطلاعات چندین کتاب (حداقل سه کتاب) را به صورت دیکشنریهای داخلی ذخیره کند و آن را چاپ کنید.
10. شمارش تعداد آیتمهای دیکشنری
دیکشنری کتابها را بررسی کرده و تعداد کلید-مقدارهای آن را چاپ کنید.
11. استفاده از متدهای get() و items()
با استفاده از متد get()، نویسندهی یک کتاب را چاپ کنید و با items() کلید-مقدارهای دیکشنری را به صورت یکجا چاپ کنید.
12. تغییر نام کلید
یک کلید در دیکشنری کتاب را تغییر دهید؛ به عنوان مثال کلید `title` را به `book_title` تغییر دهید.
13. کپی کردن دیکشنری
یک کپی از دیکشنری کتاب بگیرید و در دیکشنری جدید، سال چاپ را تغییر دهید. سپس هر دو دیکشنری را چاپ کنید.
14. ادغام دو دیکشنری
دو دیکشنری ایجاد کنید که اطلاعات کتابهای مختلفی را ذخیره کردهاند، سپس این دو دیکشنری را با هم ادغام کنید.
15. مقادیر لیست به عنوان کلیدها
یک دیکشنری بسازید که در آن نام افراد کلیدها باشند و لیستی از کتابهایی که خواندهاند به عنوان مقدارها. سپس لیست مربوط به یک فرد را چاپ کنید.
16. ایجاد دیکشنری با استفاده از لیستها
دو لیست جداگانه بسازید، یکی برای کلیدها و دیگری برای مقادیر، سپس با استفاده از این دو لیست یک دیکشنری بسازید.
17. یافتن کلیدی با بیشترین مقدار
دیکشنریای بسازید که نام کالاها به عنوان کلید و قیمت به عنوان مقدار باشد. کالا با بیشترین قیمت را پیدا کنید.
18. مرتبسازی دیکشنری بر اساس مقادیر
یک دیکشنری بسازید که شامل نام افراد و سن آنها باشد. سپس این دیکشنری را بر اساس سن مرتب کنید.
19. تبدیل دیکشنری به لیست
یک دیکشنری شامل نام کتابها و تعداد صفحات بسازید. سپس فقط عنوان کتابها را به یک لیست جداگانه تبدیل کنید.
20. استفاده از حلقههای تو در تو برای دیکشنریهای تو در تو
یک دیکشنری شامل اطلاعات کلاسهای مختلف در یک مدرسه بسازید، به طوری که برای هر کلاس، اطلاعات دانشآموزان به صورت دیکشنریهای داخلی ذخیره شده باشد. از طریق این ساختار پیمایش کنید و نام تمام دانشآموزان را چاپ کنید.