آموزش دیکشنری ها در پایتون. دیکشنریها (Dictionaries) یکی از ساختارهای دادهای پرکاربرد هستند که به شما این امکان را میدهند که دادهها را به صورت جفتهای کلید و مقدار ذخیره کنید. به عبارت دیگر، هر عنصر در یک دیکشنری از یک کلید و یک مقدار (value) تشکیل میشود. دیکشنریها برخلاف لیستها و تاپلها که به ترتیب اندیسها (Index) ارجاع میدهند، به صورت نامگذاری شده به دادهها ارجاع میدهند.
1. معرفی دیکشنریها در پایتون
دیکشنریها در پایتون به صورت {} یا با استفاده از تابع dict() ساخته میشوند.
1.1 تعریف دیکشنری
برای تعریف یک دیکشنری جدید، میتوانید از علامت {} (آکولادها) یا از تابع dict() استفاده کنید.
# تعریف دیکشنری با استفاده از {}
my_dict = {"name": "Ali", "age": 30, "city": "Tehran"}
# تعریف دیکشنری با استفاده از dict()
my_dict2 = dict(name="Sara", age=25, city="Shiraz")
در اینجا:
کلیدها (“name”, “age”, “city”) به صورت رشتهها هستند.
مقادیر مربوط به هر کلید (“Ali”, 30, “Tehran”) میتوانند هر نوع دادهای باشند (رشته، عدد صحیح، لیست، و غیره).
1.2 دسترسی به مقادیر دیکشنری
برای دسترسی به مقدار یک کلید خاص، میتوانید از سینتکس [key] استفاده کنید:
print(my_dict["name"]) # خروجی: Ali print(my_dict["age"]) # خروجی: 30
اگر کلید وجود نداشته باشد، خطای KeyError رخ میدهد.
1.3 افزودن یا تغییر مقادیر
برای افزودن یک کلید جدید یا تغییر مقدار یک کلید موجود، میتوانید به سادگی از سینتکس dict[key] = value استفاده کنید.
my_dict["email"] = "ali@example.com" # افزودن یک کلید جدید my_dict["age"] = 31 # تغییر مقدار یک کلید موجود
1.4 حذف عناصر از دیکشنری
برای حذف یک کلید و مقدار آن، میتوانید از دستور del یا متد pop() استفاده کنید.
# استفاده از del
del my_dict["age"] # حذف کلید age
# استفاده از pop()
removed_value = my_dict.pop("city") # حذف city و ذخیره مقدار آن در removed_value
print(removed_value) # خروجی: Tehran
1.5 متدهای مفید دیکشنری
دیکشنریها در پایتون دارای متدهای زیادی هستند که در اینجا به چند مورد پرکاربرد اشاره میکنیم:
keys(): برای دریافت تمام کلیدهای دیکشنری.
print(my_dict.keys()) # خروجی: dict_keys([‘name’, ’email’])
values(): برای دریافت تمام مقادیر دیکشنری.
print(my_dict.values()) # خروجی: dict_values([‘Ali’, ‘ali@example.com’])
items(): برای دریافت تمام جفتهای کلید و مقدار دیکشنری.
print(my_dict.items()) # خروجی: dict_items([(‘name’, ‘Ali’), (’email’, ‘ali@example.com’)])
get(): برای دسترسی به مقدار یک کلید بدون مواجهه با خطای KeyError در صورت عدم وجود کلید. اگر کلید وجود نداشته باشد، مقدار پیشفرض (اگر مشخص شده باشد) باز میگرداند.
print(my_dict.get(“name”)) # خروجی: Ali
print(my_dict.get(“address”, “Not Found”)) # خروجی: Not Found
1.6 پیمایش دیکشنری
میتوان دیکشنریها را با استفاده از حلقههای for پیمایش کرد. معمولاً میتوان هم کلیدها، هم مقادیر، یا هر دو را در دیکشنری پیمایش کرد.
برای پیمایش کلیدها:
for key in my_dict: print(key)
برای پیمایش مقادیر:
for value in my_dict.values(): print(value)
برای پیمایش جفتهای کلید و مقدار:
for key, value in my_dict.items(): print(key, ":", value)
1.7 ویژگیهای دیکشنریها
ترتیب (Order): از نسخه 3.7 به بعد، دیکشنریها به طور پیشفرض به ترتیب وارد شدن کلیدها نگهداری میشوند.
عدم تکرار کلیدها: کلیدهای یک دیکشنری باید یکتا باشند. اگر یک کلید دوبار تعریف شود، مقدار جدید جایگزین مقدار قبلی خواهد شد.
1.8 کاربردهای رایج دیکشنریها
دیکشنریها به دلیل ویژگیهای خاص خود در بسیاری از موارد بسیار مفید هستند، از جمله:
ذخیرهسازی دادههای مرتبط: برای ذخیرهسازی اطلاعاتی که از جفتهای کلید-مقدار تشکیل شده است، مثل ذخیرهسازی اطلاعات کاربری (نام، سن، ایمیل).
مثال:
user_info = {"name": "John", "age": 28, "email": "john@example.com"}
شمارش تعداد تکرار: برای شمارش تعداد تکرار عناصر میتوانید از دیکشنریها استفاده کنید.
مثال:
text = "apple orange apple banana apple"
word_count = {}
for word in text.split():
word_count[word] = word_count.get(word, 0) + 1
print(word_count) # خروجی: {'apple': 3, 'orange': 1, 'banana': 1}
1.9 دیکشنریهای تو در تو
دیکشنریها میتوانند به عنوان مقادیر خود دیکشنریهای دیگری را ذخیره کنند، این به شما این امکان را میدهد که ساختارهای دادهای پیچیدهتری ایجاد کنید.
مثال:
nested_dict = {
"person1": {"name": "Ali", "age": 30},
"person2": {"name": "Sara", "age": 25}
}
print(nested_dict["person1"]["name"]) # خروجی: Ali
2. دسترسی به دیکشنریها در پایتون
دسترسی به مقادیر موجود در دیکشنریها در پایتون یکی از کاربردیترین و مهمترین ویژگیها است. این امکان به شما میدهد که بتوانید به سادگی و سریع به دادهها با استفاده از کلیدها دسترسی پیدا کنید. در این بخش، نحوه دسترسی به مقادیر و استفاده از دیکشنریها را توضیح خواهیم داد.
2.1 دسترسی به مقادیر با استفاده از کلید
برای دسترسی به مقدار متناظر با یک کلید از علامت [] استفاده میکنیم. اگر کلید موجود در دیکشنری نباشد، خطای KeyError ایجاد میشود.
مثال:
my_dict = {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
}
# دسترسی به مقدار کلید 'name'
print(my_dict['name']) # خروجی: Ali
# اگر کلید وجود نداشته باشد، خطا ایجاد میشود
# print(my_dict['country']) # خطای KeyError
2.2 استفاده از متد get()
برای جلوگیری از خطای KeyError هنگام دسترسی به مقادیر دیکشنری، میتوانیم از متد get() استفاده کنیم. این متد مقدار کلید مشخص شده را برمیگرداند، و اگر کلید موجود نباشد، مقدار پیشفرض (که بهطور پیشفرض None است) را باز میگرداند.
به عنوان مثال:
# استفاده از get() برای دسترسی به مقدار
print(my_dict.get('name')) # خروجی: Ali
print(my_dict.get('country')) # خروجی: None
# میتوان مقدار پیشفرض هم تعیین کرد
print(my_dict.get('country', 'Not Found')) # خروجی: Not Found
2.3 دسترسی به کلیدها و مقادیر
برای دسترسی به تمامی کلیدها و مقادیر در دیکشنری میتوانیم از متدهای keys(), values() و items() استفاده کنیم.
keys(): مجموعهای از تمامی کلیدها را برمیگرداند.
values(): مجموعهای از تمامی مقادیر را برمیگرداند.
items(): مجموعهای از جفتهای کلید-مقدار را برمیگرداند.
مثال:
# دسترسی به تمامی کلیدها
print(my_dict.keys()) # خروجی: dict_keys(['name', 'age', 'city'])
# دسترسی به تمامی مقادیر
print(my_dict.values()) # خروجی: dict_values(['Ali', 25, 'Tehran'])
# دسترسی به جفتهای کلید-مقدار
print(my_dict.items()) # خروجی: dict_items([('name', 'Ali'), ('age', 25), ('city', 'Tehran')])
2.4 دسترسی به دیکشنریهای تو در تو
دیکشنریها میتوانند داخل دیکشنریهای دیگر قرار بگیرند. برای دسترسی به مقادیر دیکشنریهای تو در تو از چندین کلید به صورت زنجیرهای استفاده میکنیم.
به عنوان مثال:
nested_dict = {
'person': {
'name': 'Ali',
'age': 25
},
'address': {
'city': 'Tehran',
'country': 'Iran'
}
}
# دسترسی به مقدار در دیکشنری تو در تو
print(nested_dict['person']['name']) # خروجی: Ali
print(nested_dict['address']['city']) # خروجی: Tehran
2.5 بررسی وجود کلید در دیکشنری
برای بررسی اینکه یک کلید خاص در دیکشنری وجود دارد یا نه، میتوانیم از دستور in استفاده کنیم. این دستور یک مقدار بولی (True یا False) برمیگرداند.
مثال:
if 'name' in my_dict:
print("کلید 'name' وجود دارد.")
else:
print("کلید 'name' وجود ندارد.")
if 'country' not in my_dict:
print("کلید 'country' وجود ندارد.")
2.6 دسترسی به مقادیر و تغییر آنها
همانطور که گفته شد، دیکشنریها قابل تغییر هستند. میتوانید مقدار یک کلید را تغییر دهید یا کلیدی جدید اضافه کنید. برای تغییر مقدار یک کلید خاص، کافی است که کلید را به آن مقدار جدید اختصاص دهید.
مثال:
# تغییر مقدار کلید 'age'
my_dict['age'] = 26
print(my_dict) # {'name': 'Ali', 'age': 26, 'city': 'Tehran'}
# اضافه کردن یک کلید و مقدار جدید
my_dict['country'] = 'Iran'
print(my_dict) # {'name': 'Ali', 'age': 26, 'city': 'Tehran', 'country': 'Iran'}
2.7 استفاده از pop() برای حذف یک عنصر و دریافت مقدار آن
در صورتی که بخواهیم یک جفت کلید-مقدار را از دیکشنری حذف کرده و مقدار آن را نیز بدست آوریم، میتوانیم از متد pop() استفاده کنیم.
مثال:
age = my_dict.pop('age')
print(age) # 26
print(my_dict) # {'name': 'Ali', 'city': 'Tehran', 'country': 'Iran'}
2.8 استفاده از popitem() برای حذف آخرین عنصر
متد popitem() یک جفت کلید-مقدار را از دیکشنری حذف کرده و آن را برمیگرداند. از آنجا که در پایتون ۳.۷ به بعد دیکشنریها ترتیب درج را حفظ میکنند، این متد همیشه آخرین جفت کلید-مقدار را حذف میکند.
مثال:
last_item = my_dict.popitem()
print(last_item) # ('country', 'Iran')
print(my_dict) # {'name': 'Ali', 'city': 'Tehran'}
3. افزودن و حذف دادهها در دیکشنریها
دیکشنریها ساختارهایی هستند که میتوانند دادهها را به صورت جفتهای کلید-مقدار ذخیره کنند. افزودن و حذف دادهها از دیکشنریها بسیار ساده است. در این بخش، روشهای مختلف برای افزودن و حذف دادهها در دیکشنریها را بررسی خواهیم کرد.
3.1 افزودن دادهها به دیکشنری
الف) افزودن یک جفت کلید-مقدار جدید
برای افزودن یک جفت کلید-مقدار جدید به دیکشنری، کافی است یک کلید جدید مشخص کرده و آن را به یک مقدار اختصاص دهید. اگر کلید قبلاً وجود نداشته باشد، به دیکشنری اضافه میشود. اگر کلید قبلاً وجود داشته باشد، مقدار آن تغییر میکند.
مثال:
# دیکشنری اولیه
my_dict = {
'name': 'Ali',
'age': 25
}
# افزودن یک جفت کلید-مقدار جدید
my_dict['city'] = 'Tehran'
print(my_dict)
# {'name': 'Ali', 'age': 25, 'city': 'Tehran'}
ب) استفاده از متد update() برای افزودن یا تغییر مقادیر
متد update() میتواند برای افزودن چند جفت کلید-مقدار جدید یا تغییر مقادیر موجود استفاده شود. اگر کلیدها قبلاً در دیکشنری موجود باشند، مقادیر آنها به روز میشوند. اگر کلیدها وجود نداشته باشند، به دیکشنری اضافه میشوند.
مثال:
# دیکشنری اولیه
my_dict = {
'name': 'Ali',
'age': 25
}
# افزودن یا تغییر مقادیر
my_dict.update({'city': 'Tehran', 'job': 'Developer'})
print(my_dict)
# {'name': 'Ali', 'age': 25, 'city': 'Tehran', 'job': 'Developer'}
ج) استفاده از متد setdefault() برای افزودن مقدار پیشفرض
اگر بخواهید یک کلید خاص را فقط در صورتی که وجود نداشته باشد به دیکشنری اضافه کنید، از متد setdefault() استفاده میکنید. این متد مقدار پیشفرض را اضافه میکند و مقدار کلید را برمیگرداند.
مثال:
# دیکشنری اولیه
my_dict = {
'name': 'Ali',
'age': 25
}
# افزودن یک کلید تنها در صورتی که وجود نداشته باشد
my_dict.setdefault('city', 'Tehran')
my_dict.setdefault('age', 30) # این مقدار تغییر نخواهد کرد چون 'age' قبلاً وجود دارد
print(my_dict)
# {'name': 'Ali', 'age': 25, 'city': 'Tehran'}
3.2 حذف دادهها از دیکشنری
الف) حذف با استفاده از دستور del
برای حذف یک جفت کلید-مقدار از دیکشنری میتوانید از دستور del استفاده کنید. این دستور کلید و مقدار متناظر با آن را حذف میکند. اگر کلید وجود نداشته باشد، خطای KeyError به وجود میآید.
مثال:
# دیکشنری اولیه
my_dict = {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
}
# حذف یک جفت کلید-مقدار
del my_dict['age']
print(my_dict)
# {'name': 'Ali', 'city': 'Tehran'}
ب) حذف با استفاده از متد pop()
متد pop() به شما این امکان را میدهد که یک جفت کلید-مقدار را حذف کرده و مقدار آن را بازگشت دهید. اگر کلید وجود نداشته باشد، میتوانید یک مقدار پیشفرض به عنوان پارامتر دوم به متد pop() بدهید که در این صورت اگر کلید وجود نداشت، مقدار پیشفرض بازگشت داده میشود.
مثال:
# دیکشنری اولیه
my_dict = {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
}
# حذف و بازگشت مقدار
age = my_dict.pop('age')
print(age) # 25
print(my_dict)
# {'name': 'Ali', 'city': 'Tehran'}
# استفاده از pop() با مقدار پیشفرض
country = my_dict.pop('country', 'Unknown')
print(country) # Unknown
ج) حذف آخرین جفت کلید-مقدار با استفاده از popitem()
متد popitem() یک جفت کلید-مقدار را از دیکشنری حذف کرده و آن را به صورت یک تاپل برمیگرداند. از آنجا که دیکشنریها از پایتون ۳.۷ به بعد ترتیب درج را حفظ میکنند، این متد همیشه آخرین جفت کلید-مقدار را حذف میکند.
مثال:
# دیکشنری اولیه
my_dict = {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
}
# حذف آخرین جفت کلید-مقدار
last_item = my_dict.popitem()
print(last_item) # ('city', 'Tehran')
print(my_dict)
# {'name': 'Ali', 'age': 25}
د) حذف تمامی جفتهای کلید-مقدار با استفاده از clear()
اگر بخواهید تمامی دادهها را از یک دیکشنری حذف کنید و دیکشنری خالی شود، از متد clear() استفاده میکنید.
مثال:
# دیکشنری اولیه
my_dict = {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
}
# حذف تمام دادهها
my_dict.clear()
print(my_dict) # {}
4. تغییر در دیکشنریها
دیکشنریها در پایتون ساختارهایی قابل تغییر هستند. این بدین معنی است که میتوانیم مقادیر، کلیدها و حتی خود دیکشنری را تغییر دهیم. در این بخش، روشهای مختلف تغییر در دیکشنریها را بررسی خواهیم کرد.
4.1 تغییر مقدار یک کلید
برای تغییر مقدار متناظر با یک کلید در دیکشنری، کافی است کلید را مشخص کرده و مقدار جدید را به آن اختصاص دهید.
مثال:
my_dict = {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
}
# تغییر مقدار کلید 'age'
my_dict['age'] = 26
print(my_dict)
# {'name': 'Ali', 'age': 26, 'city': 'Tehran'}
در این مثال، مقدار کلید ‘age’ به 26 تغییر یافت.
4.2 اضافه کردن یک کلید و مقدار جدید
برای اضافه کردن یک جفت کلید-مقدار جدید به دیکشنری، میتوانید مستقیماً از کلید جدید استفاده کنید و آن را به یک مقدار اختصاص دهید.
مثال:
# اضافه کردن یک کلید و مقدار جدید
my_dict['country'] = 'Iran'
print(my_dict)
# {'name': 'Ali', 'age': 26, 'city': 'Tehran', 'country': 'Iran'}
در اینجا، کلید ‘country’ با مقدار ‘Iran’ به دیکشنری اضافه شد.
4.3 استفاده از متد update() برای تغییر یا اضافه کردن مقادیر
متد update() این امکان را به شما میدهد که مقادیر جدید را به دیکشنری اضافه کنید یا مقادیر موجود را تغییر دهید. اگر کلید موجود باشد، مقدار آن تغییر خواهد کرد و اگر کلید موجود نباشد، به دیکشنری افزوده میشود.
مثال:
# استفاده از update برای تغییر یا اضافه کردن مقادیر
my_dict.update({'city': 'Mashhad', 'job': 'Developer'})
print(my_dict)
# {'name': 'Ali', 'age': 26, 'city': 'Mashhad', 'country': 'Iran', 'job': 'Developer'}
در اینجا:
مقدار کلید ‘city’ از ‘Tehran’ به ‘Mashhad’ تغییر کرده است.
کلید ‘job’ با مقدار ‘Developer’ به دیکشنری اضافه شده است.
4.4 تغییر مقدار با استفاده از setdefault()
متد setdefault() برای دسترسی به مقدار یک کلید استفاده میشود، اما اگر کلید وجود نداشته باشد، مقدار پیشفرض را اضافه میکند. این متد مقدار کلید را برمیگرداند.
مثال:
# استفاده از setdefault برای تغییر مقدار یا اضافه کردن کلید
my_dict.setdefault('country', 'Iran') # چون 'country' وجود دارد، تغییر نمیکند
my_dict.setdefault('language', 'Persian') # چون 'language' وجود ندارد، به دیکشنری اضافه میشود
print(my_dict)
# {'name': 'Ali', 'age': 26, 'city': 'Mashhad', 'country': 'Iran', 'job': 'Developer', 'language': 'Persian'}
4.5 حذف یک جفت کلید-مقدار
برای حذف یک جفت کلید-مقدار از دیکشنری میتوان از دستور del یا متد pop() استفاده کرد.
del: برای حذف کلید و مقدار متناظر با آن استفاده میشود.
pop(): مقدار کلید مشخص شده را حذف کرده و آن را برمیگرداند.
مثال:
# استفاده از del برای حذف یک کلید و مقدار
del my_dict['age']
print(my_dict)
# {'name': 'Ali', 'city': 'Mashhad', 'country': 'Iran', 'job': 'Developer', 'language': 'Persian'}
# استفاده از pop برای حذف و دریافت مقدار
removed_value = my_dict.pop('city')
print(removed_value) # Mashhad
print(my_dict)
# {'name': 'Ali', 'country': 'Iran', 'job': 'Developer', 'language': 'Persian'}
4.6 استفاده از popitem() برای حذف آخرین جفت کلید-مقدار
متد popitem() یک جفت کلید-مقدار را از دیکشنری حذف کرده و آن را برمیگرداند. از آنجا که دیکشنریها از پایتون ۳.۷ به بعد ترتیب درج را حفظ میکنند، این متد همیشه آخرین جفت کلید-مقدار را حذف میکند.
مثال:
# حذف آخرین جفت کلید-مقدار با popitem
last_item = my_dict.popitem()
print(last_item) # ('language', 'Persian')
print(my_dict)
# {'name': 'Ali', 'country': 'Iran', 'job': 'Developer'}
4.7 حذف تمامی جفتهای کلید-مقدار
برای پاک کردن تمامی عناصر موجود در یک دیکشنری میتوان از متد clear() استفاده کرد.
مثال:
# پاک کردن تمام عناصر دیکشنری
my_dict.clear()
print(my_dict) # {}
4.8 ترکیب دیکشنریها
اگر بخواهید دو یا چند دیکشنری را با هم ترکیب کنید، میتوانید از متد update() یا عملگر | (از پایتون 3.9 به بعد) استفاده کنید.
مثال:
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
# استفاده از update()
dict1.update(dict2)
print(dict1)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# استفاده از عملگر | (پایتون 3.9 به بعد)
dict3 = dict1 | dict2
print(dict3)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
5. حلقه درون دیکشنریها
شما میتوانید از حلقهها برای دسترسی به دادهها در دیکشنریها استفاده کنید. دیکشنریها یک ساختار دادهای هستند که بهصورت جفتهای کلید-مقدار ذخیره میشوند. با استفاده از حلقهها میتوانید به کلیدها، مقادیر، یا هر دو (کلید و مقدار) دسترسی پیدا کنید.
در این بخش، نحوه استفاده از حلقهها در دیکشنریها را برای انواع مختلف دسترسی بررسی خواهیم کرد.
5.1 حلقه زدن روی کلیدهای دیکشنری
برای دسترسی به تمامی کلیدهای یک دیکشنری میتوانید از دستور for بهطور مستقیم روی دیکشنری استفاده کنید. این حلقه بهطور پیشفرض بر روی کلیدهای دیکشنری تکرار میکند.
مثال:
# دیکشنری نمونه
my_dict = {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
}
# حلقه زدن روی کلیدهای دیکشنری
for key in my_dict:
print(key)
خروجی:
name age city
همچنین میتوانید بهطور خاص از متد keys() برای بدست آوردن لیستی از کلیدها استفاده کنید.
مثال:
# حلقه زدن روی کلیدها با استفاده از keys() for key in my_dict.keys(): print(key)
خروجی مشابه خواهد بود:
name age city
5.2 حلقه زدن روی مقادیر دیکشنری
اگر بخواهید به مقادیر دیکشنری دسترسی پیدا کنید، میتوانید از متد values() استفاده کنید. این متد تمامی مقادیر دیکشنری را بهصورت یک شی قابل تکرار باز میگرداند.
مثال:
# حلقه زدن روی مقادیر دیکشنری for value in my_dict.values(): print(value)
خروجی:
Ali 25 Tehran
5.3 حلقه زدن روی جفتهای کلید-مقدار
برای دسترسی همزمان به کلید و مقدار متناظر با آن، میتوانید از متد items() استفاده کنید. این متد جفتهای کلید-مقدار را بهصورت تاپل (tuple) برمیگرداند که میتوانید آن را در حلقه استفاده کنید.
# حلقه زدن روی جفتهای کلید-مقدار for key, value in my_dict.items(): print(key, ":", value)
خروجی:
name : Ali age : 25 city : Tehran
در اینجا، برای هر تکرار، متغیر key کلید و متغیر value مقدار متناظر با آن کلید را دریافت میکند.
5.4 حلقه زدن روی دیکشنریهای تو در تو
اگر دیکشنری شما حاوی دیکشنریهای دیگر باشد، میتوانید از حلقههای تو در تو برای دسترسی به دادهها استفاده کنید.
# دیکشنری تو در تو
nested_dict = {
'person': {
'name': 'Ali',
'age': 25
},
'address': {
'city': 'Tehran',
'country': 'Iran'
}
}
# حلقه زدن روی دیکشنری تو در تو
for key, inner_dict in nested_dict.items():
print(key + ":")
for inner_key, inner_value in inner_dict.items():
print(f" {inner_key} : {inner_value}")
خروجی:
person: name : Ali age : 25 address: city : Tehran country : Iran
در اینجا، حلقه اول روی جفتهای کلید-مقدار دیکشنری خارجی (nested_dict) میچرخد، و سپس درون حلقه داخلی، به مقادیر دیکشنریهای داخلی (inner_dict) دسترسی پیدا میکنیم.
5.5 استفاده از enumerate() برای شمارش در حلقهها
اگر بخواهید در هنگام حلقه زدن روی دیکشنری، شماره تکرار یا اندیس را هم داشته باشید، میتوانید از enumerate() استفاده کنید. این متد در کنار کلید یا مقدار، شماره تکرار را نیز به شما میدهد.
# حلقه زدن با استفاده از enumerate
for index, (key, value) in enumerate(my_dict.items()):
print(f"{index + 1}: {key} -> {value}")
خروجی:
1: name -> Ali 2: age -> 25 3: city -> Tehran
در اینجا، index شماره تکرار است که از صفر شروع میشود و key و value کلید و مقدار هر جفت کلید-مقدار هستند.
6. دیکشنری تو در تو
دیکشنری تو در تو به دیکشنریهایی گفته میشود که مقادیر آنها خود شامل دیکشنریهای دیگری هستند. این ساختار دادهای به شما این امکان را میدهد که دادهها را به صورت سلسلهمراتبی سازماندهی کنید. استفاده از دیکشنریهای تو در تو در پایتون برای ذخیره اطلاعات پیچیدهای که شامل چندین سطح داده است، بسیار مفید است.
در این بخش، ما با نحوه تعریف، دسترسی و استفاده از دیکشنریهای تو در تو در پایتون آشنا میشویم.
6.1 تعریف دیکشنری تو در تو
یک دیکشنری تو در تو به این صورت تعریف میشود که مقادیر آن شامل دیکشنریهای دیگر باشند.
به عنوان مثال:
# تعریف یک دیکشنری تو در تو
nested_dict = {
'person': {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
},
'address': {
'city': 'Mashhad',
'country': 'Iran'
}
}
print(nested_dict)
خروجی:
{
'person': {'name': 'Ali', 'age': 25, 'city': 'Tehran'},
'address': {'city': 'Mashhad', 'country': 'Iran'}
}
در اینجا، دیکشنری اصلی دارای دو کلید است: ‘person’ و ‘address’. هر یک از این کلیدها یک دیکشنری داخلی دارند که اطلاعات بیشتری را نگهداری میکند.
6.2 دسترسی به دادهها در دیکشنری تو در تو
برای دسترسی به دادهها در دیکشنری تو در تو، باید از چندین کلید به صورت زنجیرهای استفاده کنید. ابتدا باید کلید اول را مشخص کرده و سپس از کلیدهای داخلی برای دسترسی به مقادیر استفاده کنید.
الف) دسترسی به مقدار در دیکشنری تو در تو
# دسترسی به دادهها در دیکشنری تو در تو print(nested_dict['person']['name']) # خروجی: 'Ali' print(nested_dict['address']['country']) # خروجی: 'Iran'
در این مثال، ابتدا از کلید ‘person’ برای دسترسی به دیکشنری داخلی استفاده میکنیم، سپس از کلید ‘name’ برای دسترسی به مقدار ‘Ali’ استفاده میکنیم.
ب) استفاده از متد get() برای دسترسی به دادهها
برای جلوگیری از بروز خطا در صورت وجود نداشتن یک کلید خاص، میتوانید از متد get() استفاده کنید. این متد در صورتی که کلید وجود نداشته باشد، مقدار None را باز میگرداند یا میتوانید یک مقدار پیشفرض به آن بدهید.
# استفاده از get() برای دسترسی به دادهها
name = nested_dict.get('person', {}).get('name', 'Unknown')
print(name) # خروجی: 'Ali'
# اگر کلید 'job' وجود نداشته باشد، مقدار پیشفرض 'Unknown' برگشت داده میشود
job = nested_dict.get('person', {}).get('job', 'Unknown')
print(job) # خروجی: 'Unknown'
در این مثال، از متد get() برای دسترسی ایمن به دادهها استفاده کردهایم، به این صورت که اگر کلید وجود نداشته باشد، به جای خطا، مقدار پیشفرض ‘Unknown’ باز میگردد.
6.3 تغییر دادهها در دیکشنری تو در تو
برای تغییر مقدار یک داده در دیکشنری تو در تو، مانند دیکشنریهای معمولی، کافی است کلیدهای مورد نظر را مشخص کنید و مقدار جدید را به آنها اختصاص دهید.
# تغییر دادهها در دیکشنری تو در تو nested_dict['person']['age'] = 26 nested_dict['address']['city'] = 'Isfahan' print(nested_dict)
خروجی:
{
'person': {'name': 'Ali', 'age': 26, 'city': 'Tehran'},
'address': {'city': 'Isfahan', 'country': 'Iran'}
}
در اینجا، مقدار ‘age’ در دیکشنری ‘person’ تغییر کرده و ‘city’ در دیکشنری ‘address’ به ‘Isfahan’ تغییر یافته است.
6.4 اضافه کردن دادهها به دیکشنری تو در تو
برای اضافه کردن دادهها به دیکشنری تو در تو، مشابه دیکشنریهای معمولی، کافی است کلید جدیدی را در دیکشنری داخلی اضافه کنید.
# اضافه کردن دادهها به دیکشنری تو در تو nested_dict['person']['job'] = 'Engineer' nested_dict['address']['postal_code'] = '123456' print(nested_dict)
خروجی:
{
'person': {'name': 'Ali', 'age': 26, 'city': 'Tehran', 'job': 'Engineer'},
'address': {'city': 'Isfahan', 'country': 'Iran', 'postal_code': '123456'}
}
در اینجا، یک کلید جدید ‘job’ در دیکشنری ‘person’ و یک کلید ‘postal_code’ در دیکشنری ‘address’ اضافه شده است.
6.5 حذف دادهها از دیکشنری تو در تو
برای حذف دادهها از دیکشنری تو در تو، میتوانید از دستور del یا متد pop() استفاده کنید.
الف) حذف دادهها با استفاده از del
# حذف دادهها از دیکشنری تو در تو del nested_dict['person']['city'] del nested_dict['address']['country'] print(nested_dict)
خروجی:
{
'person': {'name': 'Ali', 'age': 26, 'job': 'Engineer'},
'address': {'city': 'Isfahan', 'postal_code': '123456'}
}
ب) حذف دادهها با استفاده از pop()
# حذف دادهها با استفاده از pop()
removed_value = nested_dict['person'].pop('age')
print(f'Removed age: {removed_value}')
print(nested_dict)
خروجی:
Removed age: 26
{
'person': {'name': 'Ali', 'job': 'Engineer'},
'address': {'city': 'Isfahan', 'postal_code': '123456'}
}
6.6 حلقه زدن در دیکشنری تو در تو
برای حلقه زدن در دیکشنری تو در تو، میتوانید از حلقههای تو در تو استفاده کنید. در حلقه اول، به دیکشنریهای داخلی دسترسی پیدا میکنید و سپس در حلقه داخلی به مقادیر آنها دسترسی خواهید داشت.
# حلقه زدن در دیکشنری تو در تو
for outer_key, inner_dict in nested_dict.items():
print(f'{outer_key}:')
for inner_key, inner_value in inner_dict.items():
print(f' {inner_key}: {inner_value}')
خروجی:
person: name: Ali job: Engineer address: city: Isfahan postal_code: 123456
7. دسترسی به مقادیر دیکشنریها
دیکشنریها در پایتون یک ساختار دادهای هستند که بهصورت جفتهای کلید-مقدار عمل میکنند. برای دسترسی به مقادیر یک دیکشنری، میتوان از چند روش مختلف استفاده کرد. در این بخش، نحوه دسترسی به مقادیر دیکشنریها را بهتفصیل بررسی خواهیم کرد.
7.1 دسترسی به مقادیر با استفاده از کلید
رایجترین و سادهترین روش برای دسترسی به مقادیر یک دیکشنری استفاده از کلیدها است. کافی است کلید مورد نظر را در دیکشنری قرار دهید تا مقدار مربوط به آن کلید را بدست آورید.
# دیکشنری نمونه
my_dict = {
'name': 'Ali',
'age': 25,
'city': 'Tehran'
}
# دسترسی به مقدار با استفاده از کلید
name = my_dict['name']
print(name) # خروجی: Ali
در اینجا، کلید ‘name’ را وارد میکنیم و مقدار متناظر با آن (که ‘Ali’ است) به ما برمیگردد.
7.2 دسترسی ایمن با استفاده از متد get()
گاهی اوقات ممکن است که کلیدی که میخواهید به آن دسترسی پیدا کنید وجود نداشته باشد. در این صورت، اگر از روش دسترسی مستقیم (مانند my_dict[‘key’]) استفاده کنید، خطای KeyError به وجود میآید. برای جلوگیری از این خطا، میتوانید از متد get() استفاده کنید.
متد get() به شما این امکان را میدهد که اگر کلید مورد نظر در دیکشنری موجود نباشد، مقدار پیشفرضی را بازگشت دهد.
# دسترسی ایمن با استفاده از get()
age = my_dict.get('age')
print(age) # خروجی: 25
# وقتی کلید وجود نداشته باشد، مقدار پیشفرض 'Unknown' برمیگردد
job = my_dict.get('job', 'Unknown')
print(job) # خروجی: Unknown
در این مثال، اگر کلید ‘job’ در دیکشنری موجود نباشد، به جای بروز خطا، مقدار ‘Unknown’ برگشت داده میشود.
7.3 دسترسی به مقادیر در دیکشنریهای تو در تو
اگر دیکشنری شما حاوی دیکشنریهای داخلی باشد (دیکشنریهای تو در تو)، میتوانید از روشهای مشابه برای دسترسی به مقادیر استفاده کنید. کافی است از چندین کلید بهطور زنجیرهای استفاده کنید.
به عنوان مثال:
# دیکشنری تو در تو
nested_dict = {
'person': {
'name': 'Ali',
'age': 25
},
'address': {
'city': 'Tehran',
'country': 'Iran'
}
}
# دسترسی به مقادیر در دیکشنری تو در تو
name = nested_dict['person']['name']
print(name) # خروجی: Ali
city = nested_dict.get('address', {}).get('city', 'Unknown')
print(city) # خروجی: Tehran
در اینجا، برای دسترسی به ‘name’، ابتدا به ‘person’ میرویم و سپس کلید ‘name’ را مشخص میکنیم. در مثال دیگر، با استفاده از get() بهطور ایمن به ‘city’ دسترسی پیدا کردهایم.
7.4 دسترسی به مقادیر با استفاده از keys() و values()
گاهی اوقات ممکن است بخواهید به تمام مقادیر یا کلیدهای دیکشنری دسترسی پیدا کنید. برای این منظور، میتوانید از متدهای keys() و values() استفاده کنید که به ترتیب لیستی از کلیدها یا مقادیر دیکشنری را باز میگردانند.
الف) دسترسی به کلیدها با استفاده از keys()
# دسترسی به تمامی کلیدها keys = my_dict.keys() print(keys) # خروجی: dict_keys(['name', 'age', 'city'])
ب) دسترسی به مقادیر با استفاده از values()
# دسترسی به تمامی مقادیر values = my_dict.values() print(values) # خروجی: dict_values(['Ali', 25, 'Tehran'])
با استفاده از این متدها، میتوانید بهراحتی به تمام کلیدها و مقادیر دیکشنری دسترسی داشته باشید.
7.5 دسترسی به جفتهای کلید-مقدار با استفاده از items()
اگر بخواهید بهطور همزمان به کلیدها و مقادیر دیکشنری دسترسی پیدا کنید، میتوانید از متد items() استفاده کنید که جفتهای کلید-مقدار را بهصورت تاپلهای (key, value) باز میگرداند.
# دسترسی به جفتهای کلید-مقدار
for key, value in my_dict.items():
print(f'{key}: {value}')
خروجی:
name: Ali age: 25 city: Tehran
در اینجا، حلقه بهطور همزمان به هر جفت کلید-مقدار دیکشنری دسترسی پیدا کرده و آنها را چاپ میکند.
7.6 استفاده از setdefault() برای دسترسی و افزودن مقدار
اگر بخواهید که یک کلید را جستجو کنید و اگر موجود نبود، یک مقدار پیشفرض به آن اضافه کنید، میتوانید از متد setdefault() استفاده کنید. این متد در صورتی که کلید وجود نداشته باشد، آن را با مقدار پیشفرض اضافه میکند و سپس مقدار آن را باز میگرداند.
# استفاده از setdefault()
city = my_dict.setdefault('city', 'Unknown')
print(city) # خروجی: Tehran
