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

تا اینجا با لیست (List) و تاپل (Tuple) آشنا شدیم که هر دو مجموعه‌ای از داده‌ها را نگهداری می‌کنند. اما گاهی اوقات پیدا کردن اطلاعات بر اساس شمارهٔ خانه (Index) مناسب نیست. فرض کنید بخواهید اطلاعات یک دانش‌آموز را ذخیره کنید. اگر از لیست استفاده کنیم، باید همیشه به خاطر داشته باشیم که نام در خانه صفر، سن در خانه یک و معدل در خانه دو قرار دارد. این روش برای برنامه‌های بزرگ مناسب نیست.

در چنین شرایطی دیکشنری (Dictionary) بهترین انتخاب است. در دیکشنری هر مقدار با یک کلید (Key) ذخیره می‌شود و به جای شمارهٔ خانه، با استفاده از همان کلید به اطلاعات دسترسی پیدا می‌کنیم. به همین دلیل دیکشنری یکی از پرکاربردترین ساختارهای داده در پایتون است و تقریباً در تمام پروژه‌های واقعی از آن استفاده می‌شود.

فهرست مطالب

دیکشنری (Dictionary) در پایتون چیست؟

دیکشنری (Dictionary) یکی از مهم‌ترین ساختارهای داده در پایتون است که اطلاعات را به صورت کلید (Key) و مقدار (Value) ذخیره می‌کند. هر کلید مانند یک برچسب عمل می‌کند و به یک مقدار مشخص اشاره دارد.

به جای اینکه مانند لیست با شمارهٔ خانه‌ها (Index) به اطلاعات دسترسی داشته باشیم، در دیکشنری از نام کلید استفاده می‌کنیم. این موضوع باعث می‌شود خواندن و مدیریت داده‌ها بسیار ساده‌تر و قابل فهم‌تر باشد.

برای مثال، اگر بخواهیم اطلاعات یک دانش‌آموز را ذخیره کنیم، می‌توانیم برای هر ویژگی یک کلید در نظر بگیریم؛ مانند نام، سن و معدل. سپس هر زمان که به نام دانش‌آموز نیاز داشتیم، کافی است از کلید name استفاده کنیم و دیگر لازم نیست شمارهٔ خانهٔ آن را به خاطر بسپاریم.

دیکشنری‌ها در برنامه‌های واقعی کاربرد بسیار زیادی دارند؛ از ذخیره اطلاعات کاربران و محصولات فروشگاه گرفته تا تنظیمات برنامه‌ها، پاسخ‌های دریافت‌شده از وب‌سرویس‌ها (API) و فایل‌های JSON.

ساخت اولین دیکشنری

برای ایجاد یک دیکشنری از آکولاد ({}) استفاده می‌کنیم. داخل آکولاد، هر کلید و مقدار با علامت دو نقطه (:) از هم جدا می‌شوند و هر جفت کلید و مقدار نیز با کاما (,) از یکدیگر جدا می‌شوند.

student = {
    "name": "Ali",
    "age": 18,
    "average": 19.5
}
print(student)

خروجی:

{'name': 'Ali', 'age': 18, 'average': 19.5}

در این مثال، متغیر student یک دیکشنری است که سه عضو دارد:

  • کلید name دارای مقدار Ali
  • کلید age دارای مقدار 18
  • کلید average دارای مقدار 19.5

کلید (Key) و مقدار (Value)

هر عضو در دیکشنری از دو بخش تشکیل شده است:

  • Key (کلید): نام یا شناسه‌ای که برای دسترسی به اطلاعات استفاده می‌شود.
  • Value (مقدار): داده‌ای که در مقابل آن کلید ذخیره شده است.

به مثال زیر توجه کنید:

person = {
    "name": "Sara",
    "age": 25,
    "city": "Tehran"
}

در این دیکشنری:

کلید (Key)مقدار (Value)
nameSara
age25
cityTehran
نکات مهم درباره کلیدها

کلیدها باید یکتا (Unique) باشند.
اگر یک کلید را دوبار بنویسید، مقدار آخر جایگزین مقدار قبلی می‌شود.

person = {
    "name": "Ali",
    "name": "Reza"
}

print(person)

خروجی:

{'name': 'Reza'}

کلیدها معمولاً از نوع رشته (String) هستند، اما می‌توانند از انواع تغییرناپذیر (Immutable) مانند عدد صحیح (int)، عدد اعشاری (float)، مقدار بولی (bool) یا تاپل (tuple) نیز باشند.

scores = {
    1: "Ali",
    2: "Sara",
    3: "Reza"
}

چرا از دیکشنری استفاده می‌کنیم؟

فرض کنید اطلاعات یک دانش‌آموز را در یک لیست ذخیره کنیم.

student = ["Ali", 18, 19.5

اگر بخواهیم معدل را چاپ کنیم، باید بدانیم که معدل در خانه شماره ۲ قرار دارد.

print(student[2])

اما اگر بعداً ترتیب اطلاعات تغییر کند، شمارهٔ خانه‌ها نیز تغییر خواهند کرد و برنامه ممکن است دچار خطا شود.

اکنون همین اطلاعات را با دیکشنری ذخیره می‌کنیم.

student = {
    "name": "Ali",
    "age": 18,
    "average": 19.5
}
print(student["average"])

در این حالت، دیگر مهم نیست اطلاعات در چه ترتیبی قرار گرفته‌اند؛ همیشه با استفاده از کلید average به معدل دسترسی خواهیم داشت. به همین دلیل، دیکشنری‌ها برای نگهداری داده‌هایی که دارای نام و ویژگی هستند، بسیار مناسب‌تر از لیست‌ها هستند.

دسترسی به مقادیر دیکشنری

بعد از ایجاد یک دیکشنری، معمولاً اولین کاری که انجام می‌دهیم خواندن اطلاعات ذخیره‌شده در آن است. برای دسترسی به مقدار یک کلید، کافی است نام کلید را داخل کروشه ([]) بنویسیم.

دسترسی به یک مقدار

student = {
    "name": "Ali",
    "age": 18,
    "average": 19.5
}
print(student["name"])

خروجی:

Ali

در این مثال، مقدار مربوط به کلید name چاپ شده است.

دسترسی به چند مقدار

می‌توانیم هر تعداد کلید که بخواهیم را بخوانیم.

student = {
    "name": "Ali",
    "age": 18,
    "average": 19.5
}
print(student["name"])
print(student["age"])
print(student["average"])

خروجی:

Ali
18
19.5
اگر کلید وجود نداشته باشد

اگر کلیدی را درخواست کنیم که در دیکشنری وجود ندارد، برنامه با خطای KeyError متوقف می‌شود.

student = {
    "name": "Ali",
    "age": 18
}

print(student["phone"])

خروجی:

KeyError: 'phone'

بنابراین هنگام استفاده از کروشه ([]) باید مطمئن باشیم که کلید موردنظر در دیکشنری وجود دارد.

استفاده از متد get()

راه مطمئن‌تر برای خواندن اطلاعات، استفاده از متد get() است. اگر کلید وجود داشته باشد، مقدار آن را برمی‌گرداند و اگر وجود نداشته باشد، به جای ایجاد خطا مقدار None را برمی‌گرداند.

student = {
    "name": "Ali",
    "age": 18
}
print(student.get("name"))
print(student.get("phone"))

خروجی:

Ali
None

تعیین مقدار پیش‌فرض

می‌توانیم مشخص کنیم اگر کلید پیدا نشد، چه مقداری نمایش داده شود.

student = {
    "name": "Ali",
    "age": 18
}
print(student.get("phone", "شماره تلفن ثبت نشده است."))

خروجی:

شماره تلفن ثبت نشده است.

این ویژگی در برنامه‌های واقعی بسیار کاربردی است؛ زیرا از توقف برنامه جلوگیری می‌کند.

تغییر مقدار یک کلید

برای تغییر مقدار یک کلید، کافی است مانند انتساب متغیرها عمل کنیم.

student = {
    "name": "Ali",
    "age": 18
}
student["age"] = 19
print(student)

خروجی:

{'name': 'Ali', 'age': 19}

در این مثال مقدار کلید age از ۱۸ به ۱۹ تغییر کرده است.

تغییر چند مقدار به صورت همزمان

هر تعداد کلید را می‌توان تغییر داد.

student = {
    "name": "Ali",
    "age": 18,
    "average": 18.5
}
student["name"] = "Reza"
student["average"] = 19.75
print(student)

خروجی:

 
{'name': 'Reza', 'age': 18, 'average': 19.75}

اضافه کردن عضو جدید به دیکشنری

برای اضافه کردن یک عضو جدید، کافی است از یک کلید جدید استفاده کنیم.

student = {
    "name": "Ali",
    "age": 18
}
student["city"] = "Tehran"
print(student)

خروجی:

{'name': 'Ali', 'age': 18, 'city': 'Tehran'}

کلید city قبلاً وجود نداشت، بنابراین پایتون آن را به دیکشنری اضافه کرد.

افزودن چند عضو

student = {
    "name": "Ali"
}
student["age"] = 18
student["average"] = 19.5
student["city"] = "Karaj"
print(student)

خروجی:

{'name': 'Ali', 'age': 18, 'average': 19.5, 'city': 'Karaj'}

نکته مهم

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

student = {
    "name": "Ali"
}
student["name"] = "Sara"
print(student)

خروجی:

{'name': 'Sara'}

بنابراین:

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

حذف اعضای دیکشنری

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

حذف یک عضو با del

ساده‌ترین روش حذف یک عضو، استفاده از دستور del است.

student = {
    "name": "Ali",
    "age": 18,
    "average": 19.5
}
del student["age"]
print(student)

خروجی:

{'name': 'Ali', 'average': 19.5}

در این مثال، کلید age و مقدار مربوط به آن از دیکشنری حذف شده‌اند.

نکته: اگر کلیدی که می‌خواهید حذف کنید وجود نداشته باشد، دستور del خطای KeyError ایجاد می‌کند.

حذف یک عضو با pop()

متد pop() نیز یک عضو را حذف می‌کند، اما یک تفاوت مهم با del دارد:

علاوه بر حذف عضو، مقدار آن را نیز برمی‌گرداند. این ویژگی زمانی مفید است که قبل از حذف، به مقدار آن نیاز داشته باشیم.

student = {
    "name": "Ali",
    "age": 18,
    "average": 19.5
}
age = student.pop("age")
print(age)
print(student)

خروجی:

18
{'name': 'Ali', 'average': 19.5}

جلوگیری از ایجاد خطا در pop()

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

student = {
    "name": "Ali"
}
result = student.pop("phone", "Not Found")
print(result)

خروجی:

Not Found

در این حالت برنامه متوقف نمی‌شود و مقدار "Not Found" برگردانده می‌شود.

حذف آخرین عضو با popitem()

متد popitem() آخرین عضو اضافه‌شده به دیکشنری را حذف کرده و آن را به صورت یک تاپل برمی‌گرداند.

student = {
    "name": "Ali",
    "age": 18,
    "city": "Tehran"
}
item = student.popitem()
print(item)
print(student)

خروجی:

('city', 'Tehran')
{'name': 'Ali', 'age': 18}

همان‌طور که مشاهده می‌کنید، خروجی popitem() شامل کلید و مقدار حذف‌شده است. از نسخه Python 3.7 به بعد، popitem() همیشه آخرین عضو اضافه‌شده را حذف می‌کند.

حذف تمام اعضا با clear()

اگر بخواهیم همه اعضای دیکشنری را حذف کنیم اما خود دیکشنری باقی بماند، از متد clear() استفاده می‌کنیم.

student = {
    "name": "Ali",
    "age": 18,
    "average": 19.5
}
student.clear()
print(student)

خروجی:

{}

اکنون دیکشنری خالی است، اما متغیر student همچنان وجود دارد.

حذف کامل دیکشنری

اگر بخواهیم خود دیکشنری نیز از حافظه حذف شود، می‌توانیم از دستور del روی نام متغیر استفاده کنیم.

student = {
    "name": "Ali",
    "age": 18
}
del student

بعد از اجرای این دستور، متغیر student دیگر وجود نخواهد داشت و استفاده از آن باعث ایجاد خطای NameError می‌شود.

پیمایش دیکشنری با حلقه for

در بسیاری از برنامه‌ها لازم است تمام اطلاعات موجود در یک دیکشنری را بررسی کنیم. برای این کار از حلقه for استفاده می‌کنیم. 

برخلاف لیست که روی عناصر آن پیمایش می‌کنیم، در دیکشنری می‌توانیم روی کلیدها (Keys)، مقادیر (Values) یا هر دو به صورت همزمان پیمایش انجام دهیم.

پیمایش کلیدهای دیکشنری

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

student = {
    "name": "Ali",
    "age": 18,
    "city": "Karaj"
}
for key in student:
    print(key)

خروجی:

name
age
city

در این مثال، متغیر key در هر بار اجرای حلقه، یکی از کلیدهای دیکشنری را در اختیار ما قرار می‌دهد.

دسترسی به مقدار هر کلید

از آنجا که در هر بار اجرای حلقه یک کلید در اختیار داریم، می‌توانیم مقدار مربوط به آن را نیز نمایش دهیم.

student = {
    "name": "Ali",
    "age": 18,
    "city": "Karaj"
}
for key in student:
    print(key, ":", student[key])

خروجی:

name : Ali
age : 18
city : Karaj

این روش یکی از رایج‌ترین روش‌های پیمایش دیکشنری است.

پیمایش فقط کلیدها با keys()

متد keys() تمام کلیدهای دیکشنری را برمی‌گرداند.

student = {
    "name": "Ali",
    "age": 18,
    "city": "Karaj"
}
for key in student.keys():
    print(key)

خروجی:

name
age
city

از نظر نتیجه، این روش با پیمایش مستقیم دیکشنری تفاوتی ندارد؛ اما خوانایی کد را بیشتر می‌کند و مشخص است که هدف، پیمایش کلیدهاست.

پیمایش فقط مقادیر با values()

اگر فقط به مقادیر نیاز داشته باشیم، از متد values() استفاده می‌کنیم.

student = {
    "name": "Ali",
    "age": 18,
    "city": "Karaj"
}
for value in student.values():
    print(value)

خروجی:

Ali
18
Karaj

در این حالت، کلیدها نمایش داده نمی‌شوند و فقط مقادیر چاپ می‌شوند.

پیمایش کلید و مقدار با items()

متد items() یکی از مهم‌ترین متدهای دیکشنری است. این متد هر عضو دیکشنری را به صورت یک تاپل شامل کلید و مقدار برمی‌گرداند.

student = {
    "name": "Ali",
    "age": 18,
    "city": "Karaj"
}
for item in student.items():
    print(item)

خروجی:

('name', 'Ali')
('age', 18)
('city', 'Karaj')

همان‌طور که مشاهده می‌کنید، هر خروجی یک تاپل است که عضو اول آن کلید و عضو دوم آن مقدار است.

باز کردن (Unpacking) کلید و مقدار

از آنجا که items() تاپل برمی‌گرداند، می‌توانیم آن را مستقیماً به دو متغیر تقسیم کنیم.

student = {
    "name": "Ali",
    "age": 18,
    "city": "Karaj"
}
for key, value in student.items():
    print(key, ":", value)

خروجی:

name : Ali
age : 18
city : Karaj
 

این روش، استانداردترین و پرکاربردترین روش پیمایش دیکشنری در پایتون است.

نکته مهم

اگر قصد دارید هم کلید و هم مقدار را در اختیار داشته باشید، همیشه از items() استفاده کنید. این روش هم خواناتر است و هم سریع‌تر از این است که ابتدا کلیدها را پیمایش کرده و سپس با dictionary[key] مقدار هر کلید را به دست آورید.

به روز رسانی مقادیر دیکشنری

متد update()

از متد update() برای اضافه کردن یا به‌روزرسانی اعضای یک دیکشنری استفاده می‌شود. اگر کلید وجود نداشته باشد، عضو جدید ایجاد می‌شود و اگر کلید از قبل وجود داشته باشد، مقدار آن تغییر می‌کند.

student = {
    "name": "Ali",
    "age": 18
}

student.update({"city": "Karaj"})
print(student)

خروجی:

{'name': 'Ali', 'age': 18, 'city': 'Karaj'}

به‌روزرسانی مقدار یک کلید

student = {
    "name": "Ali",
    "age": 18
}

student.update({"age": 19})
print(student)

خروجی:

{'name': 'Ali', 'age': 19}

اضافه کردن چند عضو همزمان

student = {
    "name": "Ali"
}

student.update({
    "age": 18,
    "city": "Karaj",
    "average": 19.5
})

print(student)

خروجی:

{'name': 'Ali', 'age': 18, 'city': 'Karaj', 'average': 19.5}

کپی کردن دیکشنری با متد copy()

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

student = {
    "name": "Ali",
    "age": 18
}

new_student = student.copy()
print(new_student)

خروجی:

{'name': 'Ali', 'age': 18

بررسی وجود یک کلید با عملگر in

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

student = {
    "name": "Ali",
    "age": 18
}

print("name" in student)
print("city" in student)

خروجی:

True
False

استفاده از if و in

student = {
    "name": "Ali",
    "age": 18
}

if "age" in student:
    print("Age:", student["age"])

خروجی:

Age: 18

این روش باعث می‌شود برنامه با خطای KeyError مواجه نشود.

بررسی عدم وجود کلید با not in

اگر بخواهیم بررسی کنیم که یک کلید وجود ندارد، از not in استفاده می‌کنیم.

student = {
    "name": "Ali",
    "age": 18
}

if "phone" not in student:
    print("شماره تلفن ثبت نشده است.")

خروجی:

شماره تلفن ثبت نشده است.

📝 تمرین 1

یک دیکشنری به نام student ایجاد کنید که شامل اطلاعات زیر باشد:

  • نام: Ali
  • سن: 18
  • رشته: Computer

سپس کل دیکشنری را چاپ کنید.

📝 تمرین 2

دیکشنری زیر را ایجاد کنید:

  • name : Sara
  • age : 22
  • city : Tehran

فقط مقدار مربوط به کلید city را چاپ کنید.

📝 تمرین 3

یک دیکشنری برای یک محصول ایجاد کنید که شامل نام کالا و قیمت آن باشد.

سپس قیمت کالا را تغییر داده و دیکشنری جدید را چاپ کنید.

📝 تمرین 4

دیکشنری زیر را ایجاد کنید:

  • name : Reza
  • age : 20

سپس یک کلید جدید به نام phone با مقدار دلخواه به آن اضافه کنید و دیکشنری را چاپ کنید.

📝 تمرین 5

دیکشنری زیر را ایجاد کنید:

  • name : Ali
  • age : 18
  • city : Karaj

بررسی کنید آیا کلید city در دیکشنری وجود دارد یا خیر.

اگر وجود داشت عبارت Found و در غیر این صورت عبارت Not Found را چاپ کنید.

📝 تمرین 6

یک دیکشنری شامل سه میوه و قیمت هر کدام ایجاد کنید.

با استفاده از حلقه for، نام هر میوه و قیمت آن را به صورت زیر چاپ کنید:

Apple : 50
Banana : 35
Orange : 40

📝 تمرین 7

دیکشنری زیر را ایجاد کنید که نام دانش‌آموزان و نمره آن‌ها را نگهداری می‌کند.

Ali : 18
Sara : 20
Reza : 17
Maryam : 19

بدون تغییر دیکشنری، نام دانش‌آموزی را که بیشترین نمره را دارد همراه با نمره او چاپ کنید.

📝 تمرین 8

اطلاعات خود را در یک دیکشنری ذخیره کنید.

دیکشنری باید حداقل شامل پنج کلید زیر باشد:

  • name
  • age
  • city
  • job
  • favorite_language

سپس با استفاده از حلقه for تمام کلیدها و مقادیر را به صورت زیر چاپ کنید:

name : ...
age : ...
city : ...
...

مجموعه (set) در پایتون

تا اینجا با لیست، تاپل و دیکشنری آشنا شدید. در بخش بعدی به سراغ مجموعه (Set) می‌رویم؛ ساختاری که برای نگهداری داده‌های غیرتکراری و انجام عملیات روی مجموعه‌ها مانند اجتماع، اشتراک و تفاضل بسیار کاربردی است.

گام بعدی : مجموعه در پایتون

برای شرکت در آزمون آماده‌اید؟

با ورود به پنل کاربری می‌توانید جهت ثبت نام در آزمون‌ها و دسترسی به منابع آموزشی اقدام نمایید. کارشناسان ما در اسرع وقت با شما تماس می‌گیرند.

شروع کار با Django

شروع کار با Django در دوره آموزش جامع پایتون با مفاهیمی مانند متغیرها، شرط‌ها، حلقه‌ها، توابع، کلاس‌ها، فایل‌ها و کار

ادامه مطلب »

عملیات CRUD در SQLite

عملیات CRUD درSQLite در بخش قبل با مفهوم پایگاه داده، SQLite و نحوه اتصال پایتون به پایگاه داده آشنا شدیم.

ادامه مطلب »

توابع در پایتون

توابع در پایتون اگر هنگام برنامه‌نویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و

ادامه مطلب »

مجموعه در پایتون

مجموعه (Set) در پایتون به زبان ساده، Set مجموعه‌ای از عناصر منحصربه‌فرد (Unique) است که ترتیب مشخصی ندارد و اجازه

ادامه مطلب »

تاپل در پایتون

تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی

ادامه مطلب »

لیست در پایتون

لیست (List) در پایتون پرکاربردترین ساختار داده​ تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود

ادامه مطلب »

آموزش نصب پایتون

آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفته‌اید برنامه‌نویسی را یاد بگیرید، احتمالاً نام زبان

ادامه مطلب »