Table of Contents
آشنایی با دیکشنریها در پایتون
دیکشنری (dict) یک ساختار دادهای کلید–مقدار است. به جای اینکه مثل لیست با «شمارهٔ مکان» (ایندکس) کار کنید، در دیکشنری با «کلید»ها کار میکنید.
یک دیکشنری ساده:
student = {
"name": "Ali",
"age": 20,
"city": "Tehran"
}در این مثال:
"name","age","city"→ کلیدها (keys)"Ali",20,"Tehran"→ مقدارها (values)
هر کلید به یک مقدار متصل است؛ میتوان گفت دیکشنری مثل یک فرهنگ لغت است: «کلمه» (کلید) → «معنا» (مقدار).
ساختن دیکشنری
۱. استفاده از آکولاد `{}`
رایجترین روش:
person = {
"first_name": "Sara",
"last_name": "Ahmadi",
"age": 25
}میتوانید دیکشنری خالی بسازید:
empty_dict = {}و بعداً به آن آیتم اضافه کنید.
۲. استفاده از تابع `dict()`
info = dict(name="Reza", age=30, city="Shiraz")در این روش کلیدها باید نامهای معتبری مثل اسم متغیر باشند (نمیتوانید فاصله بگذارید و …).
دسترسی به مقادیر دیکشنری
برای خواندن مقدار یک کلید، از براکت [] استفاده میکنیم:
student = {
"name": "Ali",
"age": 20,
"city": "Tehran"
}
print(student["name"]) # Ali
print(student["age"]) # 20
اگر کلید وجود نداشته باشد، ارور میگیرید (KeyError):
print(student["phone"]) # خطااستفاده از متد `get()`
اگر مطمئن نیستید کلید وجود دارد، میتوانید از get() استفاده کنید:
print(student.get("city")) # Tehran
print(student.get("phone")) # None
print(student.get("phone", "N/A")) # N/A (مقدار پیشفرض)افزودن و تغییر آیتمها
افزودن یک کلید–مقدار جدید
student = {
"name": "Ali",
"age": 20
}
student["city"] = "Tehran"
print(student)
# {'name': 'Ali', 'age': 20, 'city': 'Tehran'}تغییر مقدار یک کلید موجود
student["age"] = 21
print(student["age"]) # 21اگر کلید قبلاً وجود داشته باشد، مقدارش بهروزرسانی میشود؛ اگر نداشته باشد، اضافه میشود.
حذف آیتمها از دیکشنری
استفاده از `del`
student = {
"name": "Ali",
"age": 21,
"city": "Tehran"
}
del student["city"]
print(student)
# {'name': 'Ali', 'age': 21}
اگر کلید وجود نداشته باشد، با del خطا میگیرید.
استفاده از `pop()`
pop() مقدار حذفشده را هم برمیگرداند:
age = student.pop("age")
print(age) # 21
print(student) # {'name': 'Ali'}میتوانید مقدار پیشفرض هم بدهید تا در صورت نبودن کلید، خطا نگیرید:
phone = student.pop("phone", "not found")
print(phone) # not foundحذف همهٔ آیتمها با `clear()`
student.clear()
print(student) # {}پیمایش (loop) روی دیکشنری
فقط روی کلیدها (`keys`)
user = {
"username": "ali123",
"email": "ali@example.com",
"active": True
}
for key in user:
print(key)
# username
# email
# activeبرابر است با:
for key in user.keys():
print(key)فقط روی مقدارها (`values`)
for value in user.values():
print(value)
# ali123
# ali@example.com
# Trueروی هر دو (`items` → جفت کلید و مقدار)
for key, value in user.items():
print(key, ":", value)
# username : ali123
# email : ali@example.com
# active : Trueکلیدها و مقادیر معتبر در دیکشنری
نکات مهم:
- کلیدها باید یکتا باشند؛ اگر دوبار از یک کلید استفاده کنید، مقدار قبلی جایگزین میشود.
- مقدارها میتوانند تکراری باشند.
- معمولاً از رشتهها (
str) بهعنوان کلید استفاده میشود، ولی عدد و حتی تاپل هم میتواند باشد.
مثال: کلید تکراری
data = {
"a": 1,
"b": 2,
"a": 3
}
print(data) # {'a': 3, 'b': 2}
کلید "a" دوبار آمده، مقدار نهایی ۳ است.
بررسی وجود یک کلید در دیکشنری
برای فهمیدن اینکه یک کلید وجود دارد یا نه، از in استفاده میکنیم:
product = {
"name": "Laptop",
"price": 25000000
}
print("price" in product) # True
print("color" in product) # False
if "color" not in product:
product["color"] = "black"کاربردهای رایج دیکشنری
۱. ذخیرهٔ اطلاعات یک موجودیت (مثلاً یک کاربر)
user = {
"id": 101,
"name": "Sara",
"email": "sara@example.com",
"is_admin": False
}۲. نگهداشتن تنظیمات (Configuration)
settings = {
"theme": "dark",
"language": "fa",
"autosave": True
}۳. شمارش تعداد تکرارها (Frequency)
text = "apple banana apple orange apple banana"
counts = {}
for word in text.split():
if word in counts:
counts[word] += 1
else:
counts[word] = 1
print(counts)
# {'apple': 3, 'banana': 2, 'orange': 1}دیکشنریهای تو در تو (Nested Dictionaries)
میتوانید دیکشنری داخل دیکشنری داشته باشید؛ مثلاً چند دانشآموز، هرکدام با اطلاعات جداگانه:
students = {
"s1": {"name": "Ali", "age": 20},
"s2": {"name": "Sara", "age": 22},
}
print(students["s1"]["name"]) # Aliچند متد مهم دیکشنری
بهجز get و pop و clear که دیدیم، متدهای مفید دیگری هم هست.
`update()` برای ترکیب/بهروزرسانی
user = {
"username": "ali123",
"email": "ali@old.com"
}
user.update({
"email": "ali@new.com",
"active": True
})
print(user)
# {'username': 'ali123', 'email': 'ali@new.com', 'active': True}`keys()`، `values()`، `items()`
این متدها برای گرفتن نمایی از کلیدها، مقدارها و جفتهاست؛ معمولاً در حلقهها استفاده میشوند:
print(user.keys()) # dict_keys([...])
print(user.values()) # dict_values([...])
print(user.items()) # dict_items([...])میتوانید آنها را به لیست تبدیل کنید:
keys_list = list(user.keys())تبدیل بین لیست و دیکشنری (مثال ساده)
گاهی داده بهصورت لیست جفتهاست و میخواهید دیکشنری بسازید:
pairs = [("a", 1), ("b", 2), ("c", 3)]
d = dict(pairs)
print(d) # {'a': 1, 'b': 2, 'c': 3}یا میخواهید دیکشنری را به لیست جفتها تبدیل کنید:
items_list = list(d.items())
print(items_list)
# [('a', 1), ('b', 2), ('c', 3)]تمرینهای پیشنهادی
۱. دیکشنریای به نام book بسازید که کلیدهای "title", "author", "year" داشته باشد و اطلاعات یک کتاب دلخواه را در آن ذخیره کنید. سپس:
- مقدار
yearرا چاپ کنید. - سال انتشار را به مقدار دیگری تغییر دهید.
- یک کلید جدید
"pages"اضافه کنید.
۲. یک رشته مثل "red blue red green blue blue" را بگیرید و با استفاده از دیکشنری، تعداد تکرار هر رنگ را بشمارید و نتیجه را چاپ کنید.
۳. دیکشنریای از چند کاربر بسازید (بهصورت تو در تو) که برای هر کاربر، نام و سن را نگه دارد. سپس با حلقه:
- نام و سن همه را چاپ کنید.
- فقط نام کسانی را چاپ کنید که سنشان بالاتر از ۲۰ است.