دیکشنری در پایتون (Dictionary) یک ساختار داده برای ذخیره اطلاعات بهصورت جفتهای کلید و مقدار (Key:Value) است. برخلاف لیستها که با ایندکسهای عددی کار میکنند، در دیکشنری شما با استفاده از یک کلید منحصربهفرد به مقدار موردنظر دسترسی پیدا میکنید. دیکشنریها تغییرپذیر (Mutable) هستند و در نسخههای جدید پایتون (۳.۷ به بعد) ترتیب درج آیتمها را حفظ میکنند.
اگر میخواهید بدانید چگونه دیکشنری بسازید، مقادیر آن را مدیریت کنید و از متدهای پیشرفته آن استفاده کنید، این راهنما تمام دستورات لازم را پوشش میدهد.
فهرست مطالب
روشهای ساخت دیکشنری پایتون (۳ متد اصلی)
برای شروع آموزش دیکشنری در پایتون، ابتدا باید بدانیم چطور این ساختار داده را خلق کنیم. پایتون (Python) بهعنوان یک زبان انعطافپذیر، راههای متنوعی را پیش پای برنامهنویسان میگذارد، اما سه روش زیر، استانداردترین و پرکاربردترین شیوهها در آموزش ساخت دیکشنری در پایتون هستند.
۱. استفاده از آکولاد {} (رایجترین روش)
سریعترین راه برای تعریف یک دیکشنری، استفاده از یک جفت آکولاد است. شما کلید و مقدار را با علامت دونقطه (:) از هم جدا میکنید. این روش بهدلیل خوانایی بالا و سرعت نوشتن، محبوبترین متد بین توسعهدهندگان است.
# یک دیکشنری ساده شامل اطلاعات کاربر
user_profile = {
"name": "Ferdowsi",
"service": "Cloud Computing",
"active": True
}
۲. استفاده از تابع سازنده dict()
گاهی اوقات دادههای شما بهصورت متغیرهای جداگانه هستند یا میخواهید کدی بنویسید که صریحتر باشد. در این حالت تابع dict() کاربرد دارد. نکته مهم اینجاست که در این روش، کلیدها (Keys) نباید داخل کوتیشن باشند (مثل نام متغیر رفتار میکنند).
# ساخت دیکشنری با تابع dict
server_config = dict(cpu=4, ram="16GB", disk="SSD")
۳. ترکیب لیستها با تابع zip() (روش حرفهای)
فرض کنید دو لیست جداگانه دارید: یکی شامل نام استانها و دیگری شامل کد تلفن آنها. چطور این دو را به یک دیکشنری در پایتون تبدیل کنیم؟ اینجا تابع zip معجزه میکند. این تابع دو لیست را بهصورت زیپشده روی هم میاندازد و جفتهای کلید-مقدار میسازد.
keys = ["Tehran", "Shiraz", "Mashhad"]
values = [21, 71, 51]
# ترکیب دو لیست و تبدیل به دیکشنری
phone_codes = dict(zip(keys, values))
print(phone_codes)
# خروجی: {'Tehran': 21, 'Shiraz': 71, 'Mashhad': 51}
دسترسی به مقادیر دیکشنری

پساز ساخت، نوبت به استخراج اطلاعات میرسد. در آموزش کار با دیکشنری در پایتون، نحوه فراخوانی دادهها آنقدر مهم است که میتواند باعث ایجاد یک کد پایدار یا کدی شود که دائم کرش (Crash) میکند. دو روش اصلی برای دسترسی به مقادیر دیکشنری در پایتون وجود دارد که تفاوت اصلی آنها در مدیریت خطاها است.
فراخوانی مستقیم با کلید [‘key’]
این روش شبیه به فراخوانی ایندکس در لیستهاست، با این تفاوت که بهجای شماره، نام کلید را داخل براکت مینویسید.
- مزیت: کدنویسی کوتاهتر
- ریسک: اگر کلیدی که صدا میزنید وجود نداشته باشد، پایتون بلافاصله خطای KeyError میدهد و برنامه متوقف میشود.
data = {"brand": "Ford", "model": "Mustang"}
print(data["model"]) # خروجی: Mustang
# print(data["year"]) # این خط باعث خطای KeyError میشود چون year وجود ندارد
فراخوانی ایمن با متد .get()
اگر مطمئن نیستید که یک کلید در دیکشنری وجود دارد یا نه، متد .get() بهترین ابزار برای شماست. این متد درصورت نبودن کلید، بهجای متوقفکردن برنامه، مقدار None یا یک پیام پیشفرض که شما تعیین میکنید را برمیگرداند.
data = {"brand": "Ford", "model": "Mustang"}
# حالت اول: کلید وجود ندارد، اما برنامه خطا نمیدهد
x = data.get("year")
print(x) # خروجی: None
# حالت دوم: تعیین مقدار پیشفرض
y = data.get("color", "Not Available")
print(y) # خروجی: Not Available
نکته مهم: در پروژههای بزرگ که دادهها از سمت سرور یا API میآیند و احتمال ناقص بودن آنها وجود دارد، همیشه از .get() استفاده کنید تا پایداری نرمافزار حفظ شود.
افزودن و تغییر مقادیر در دیکشنری
یکی از جذابترین ویژگیها در آموزش Dictionary در پایتون، انعطافپذیری بالای آن است (Mutable بودن). برخلاف تاپلها که پساز ساختهشدن ثابت میمانند، دیکشنری مثل یک موجود زنده است که میتوان هر لحظه اطلاعات آن را کم یا زیاد کرد. در این بخش یاد میگیریم چگونه دادههای جدید را وارد یا دادههای قبلی را اصلاح کنیم.
روش انتساب مستقیم (سادهترین راه)
در پایتون، مرز بین افزودن و تغییردادن بسیار باریک است. اگر کلیدی را صدا بزنید و مقداری به آن بدهید:
- اگر کلید وجود داشته باشد، مقدارش آپدیت میشود.
- اگر کلید وجود نداشته باشد، یک جفت جدید ساخته میشود.
car = {"brand": "Ford", "model": "Mustang", "year": 1964}
# تغییر مقدار (Update)
car["year"] = 2024
# افزودن کلید جدید (Add)
car["color"] = "Red"
print(car)
# خروجی: {'brand': 'Ford', 'model': 'Mustang', 'year': 2024, 'color': 'Red'}
استفاده از متد .update() (روش حرفهای)
زمانی که میخواهید چندین تغییر را همزمان اعمال کنید یا یک دیکشنری دیگر را به دیکشنری فعلی بچسبانید، متد update() بهترین گزینه است. این متد ورودی را میگیرد (که میتواند یک دیکشنری دیگر یا یک لیست از تاپلها باشد) و اگر کلیدها موجود باشند آنها را بهروزرسانی میکند و اگر نباشند آنها را اضافه میکند.
# افزودن و ویرایش همزمان
car.update({"year": 2025, "gearbox": "Automatic"})
نکته کلیدی: در بحث افزودن و حذف عنصر در دیکشنری پایتون، به یاد داشته باشید که کلیدها (Keys) باید یکتا باشند. اگر تلاش کنید یک کلید تکراری بسازید، پایتون بدون هیچ خطایی، مقدار جدید را جایگزین مقدار قبلی میکند.
حذف عناصر از دیکشنری و پاکسازی دادهها

مدیریت حافظه و تمیز نگه داشتن دادهها به اندازه افزودن آنها مهم است. پایتون ابزارهای متنوعی را برای حذف عنصر در دیکشنری ارائه کرده است که هر کدام کاربرد خاص خود را دارند.
۱. متد .pop()؛ حذف با بازگشت مقدار
اگر میخواهید یک آیتم را حذف کنید اما مقدار آن را برای استفادههای بعدی نیاز دارید، pop() گزینه ایدهآلی است. شما کلید را میدهید، پایتون آن را حذف میکند و مقدارش را به شما برمیگرداند.
squares = {1: 1, 2: 4, 3: 9, 4: 16}
removed_val = squares.pop(4)
print(squares) # خروجی: {1: 1, 2: 4, 3: 9}
print(removed_val) # خروجی: 16
۲. متد .popitem()؛ حذف آخرین ورودی
در نسخههای جدید پایتون (۳.۷ به بعد) که دیکشنریها ترتیب را حفظ میکنند، متد popitem() آخرین آیتمی که به دیکشنری اضافه شده است را حذف میکند و بهصورت یک تاپل (key, value) برمیگرداند.
۳. دستور del و متد .clear()
- دستور del: این دستور قدرتمند میتواند هم یک آیتم خاص را حذف کند (del dict[key]) و هم میتواند کل دیکشنری را بهطور کامل از حافظه پاک کند، بهطوری که انگار هرگز وجود نداشته است.
- متد .clear(): اگر میخواهید دیکشنری خالی شود اما ظرف آن (ساختار متغیر) باقی بماند تا بعداً دوباره پر شود، از clear() استفاده کنید.
پیمایش و حلقه در دیکشنری (Looping)
آموزش دیکشنری در پایتون زمانی جذاب و کاربردی میشود که بخواهید روی هزاران داده بچرخید و عملیاتی را انجام دهید. برخلاف لیستها که فقط یک نوع پیمایش دارند، دیکشنریها بهدلیل ساختار دوبخشی (کلید:مقدار)، سه روش مختلف برای حلقهزنی (Iteration) با دستور for در اختیار شما میگذارند.
۱. پیمایش روی کلیدها (Keys)
وقتی یک حلقه for ساده روی دیکشنری مینویسید، پایتون بهصورت پیشفرض روی کلیدها حرکت میکند.
thisdict = {"brand": "Ford", "model": "Mustang", "year": 1964}
# این دو روش یکسان عمل میکنند
for x in thisdict:
print(x)
# روش صریحتر
for x in thisdict.keys():
print(x)
۲. پیمایش روی مقادیر (Values)
گاهی اوقات اصلاً مهم نیست کلید چیست و فقط به دادهها (Value) نیاز دارید. در این حالت متد .values() به کار میآید. این روش برای محاسبات آماری روی دادههای عددی بسیار پرکاربرد است.
for x in thisdict.values():
print(x) # خروجی: Ford, Mustang, 1964
۳. پیمایش روی جفتها (Items) – کاملترین روش
برای دسترسی به مقادیر دیکشنری در پایتون همراه با کلیدهایشان، متد .items() بهترین انتخاب است. این متد هر آیتم را بهصورت یک تاپل برمیگرداند که میتوانیم آن را در لحظه باز (Unpack) کنیم.
for key, value in thisdict.items():
print(f"Key: {key}, Value: {value}")
نکته برای حرفهایها: استفاده از .items() خواناترین و «پایتونیترین» (Pythonic) روش برای زمانی است که هم به نام فیلد و هم به مقدار آن نیاز دارید.
دیکشنریهای تودرتو (Nested Dictionaries)
در دنیای واقعی، دادهها همیشه خطی و ساده نیستند. اغلب اوقات ما با ساختارهای سلسلهمراتب و درختی سروکار داریم (مثل لیست کارمندان یک شرکت که هر کدام جزئیات خود را دارند). در آموزش دیکشنری در پایتون به این ساختار که یک دیکشنری میتواند دیکشنریهای دیگری را درون خود جای دهد، دیکشنری تودرتو میگویند. این دقیقاً همان ساختاری است که در فرمتهای پیشرفته وب مانند JSON با آن روبرو میشوید.
ساختار و نحوه تعریف
برای ساختن یک دیکشنری تودرتو، کافی است مقدار (Value) یک کلید را برابر با یک دیکشنری دیگر قرار دهید.
employees = {
"emp1": {
"name": "Ali",
"year": 2010
},
"emp2": {
"name": "Sara",
"year": 2018
}
}
دسترسی به لایههای داخلی
نکته مهم در دیکشنریهای تودرتو در پایتون، نحوه بیرون کشیدن اطلاعات از اعماق این ساختار است. برای این کار باید از براکتهای زنجیرهای استفاده کنید. براکت اول وارد دیکشنری اصلی میشود و براکت دوم وارد دیکشنری داخلی.
# دسترسی به نام کارمند دوم
print(employees["emp2"]["name"])
# خروجی: Sara
نکته: هرچه عمق تودرتویی بیشتر شود، خوانایی کد کمتر میشود. اگر عمق دادههایتان خیلی زیاد است، شاید بهتر باشد به جای دیکشنری از کلاسها (Classes) استفاده کنید.
ترفندهای کاربردی و متدها
تا اینجا با اصول پایه آشنا شدیم، اما برای اینکه کدی تمیزتر و مدرنتر بنویسید، باید با ابزارهای پیشرفتهتر و ویژگیهای جدید پایتون آشنا شوید. در این بخش از آموزش کار با دیکشنری در پایتون، تکنیکهایی را بررسی میکنیم که شما را از یک مبتدی به یک برنامهنویس سطح متوسط تبدیل میکند.
کپی کردن و دامِ علامت مساوی (=)
یک اشتباه رایج این است که تصور کنیم با نوشتن dict2 = dict1 یک کپی از آن ساختهایم. در پایتون، این کار فقط یک ارجاع (Reference) جدید میسازد؛ یعنی اگر dict2 را تغییر دهید، dict1 هم تغییر میکند! برای جلوگیری از این فاجعه، باید از متد .copy() استفاده کنید.
دیکشنری کامپرهنشن
اگر با List Comprehension آشنا باشید، عاشق این قابلیت میشوید. این ویژگی به شما اجازه میدهد تنها در یک خط کد، یک دیکشنری جدید بسازید. این روش نهتنها کد را کوتاهتر میکند، بلکه اغلب سریعتر از حلقههای for معمولی اجرا میشود.
# ساخت دیکشنری توان دوم اعداد با یک خط کد
squares = {x: x*x for x in range(6)}
print(squares)
# خروجی: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
عملگر ادغام | (ویژگی جدید پایتون ۳.۹+)
یکی از جذابترین ویژگیهایی که در نصب پایتون نسخههای جدید (۳.۹ به بالا) اضافه شده، عملگر پایپ | برای ادغام دیکشنریهاست. قبلاز این، ادغام دو دیکشنری دردسرهای متد update را داشت، اما حالا بسیار ساده شده است.
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
# ادغام راحت با علامت |
merged = dict1 | dict2
print(merged)
# خروجی: {'a': 1, 'b': 3, 'c': 4}
# نکته: مقدار کلید مشترک 'b' از دیکشنری دوم گرفته شد
# نکته: مقدار کلید مشترک ‘b’ از دیکشنری دوم گرفته شد
توجه: عملگر | فقط در پایتون ۳.۹ و بالاتر کار میکند. اگر روی سرورهای قدیمی کد میزنید، مراقب این نکته باشید.
تفاوت دیکشنری و لیست در پایتون
یکی از پرتکرارترین سؤالات در آموزش دیکشنری در پایتون این است: چرا وقتی لیستها هستند، باید از دیکشنری استفاده کنیم؟ در نگاه اول هر دو مجموعهای از دادهها را نگه میدارند، اما در زیر کاپوت، معماری آنها کاملاً متفاوت است.
ساختار و سرعت (Hash Map دربرابر Array)
لیستها آرایههایی مرتب هستند که با ایندکس عددی کار میکنند (مثل خانههای پلاکدار یک خیابان). برای پیدا کردن یک عضو خاص در یک لیست بزرگ، پایتون گاهی مجبور است تکتک خانهها را بگردد. اما دیکشنریها بر پایه جدول درهمسازی (Hash Map) کار میکنند. کلید شما هش میشود و پایتون دقیقاً میداند دیتا کجاست؛ یعنی سرعت پیدا کردن داده در دیکشنری تقریباً آنی است، چه ۱۰ عضو داشته باشید چه ۱۰ میلیون!
اگر دادههای شما ترتیب دارند (مثل لاگهای زمانی)، لیست انتخاب بهتری است؛ اما اگر دادههای ساختاریافته دارید و سرعت جستجو حیاتی است، دیکشنری بهتر است. برای مقایسه دقیقتر ساختارهای داده، پیشنهاد میکنیم مقاله تفاوت لیست و تاپل در پایتون را نیز مطالعه کنید.
جدول مقایسه لیست و دیکشنری در پایتون
| ویژگی | لیست | دیکشنری |
|---|---|---|
| نحوه دسترسی | ایندکس عددی (0, 1, 2…) | کلید دلخواه (رشته، عدد و…) |
| ترتیب | همیشه مرتب (Ordered) | مرتب در پایتون ۳.۷+ |
| سرعت جستجو | کند در دادههای زیاد (O(n)) | بسیار سریع (O(1)) |
| نحوه تعریف | با کروشه [] | با آکولاد {} |
| کاربرد اصلی | ذخیره مجموعه دادههای همجنس | ذخیره دادههای ساختاریافته (Key-Value) |
دیکشنری، JSON و شروع تحلیل داده حرفهای
دنیای واقعی برنامهنویسی، دنیای دادههاست. اگر قصد دارید وارد حوزه وب یا هوش مصنوعی شوید، آموزش دیکشنری در پایتون دروازه ورود شما به فرمت جهانی JSON است.
دیکشنری؛ دوقلوی همسان JSON
فرمت JSON (JavaScript Object Notation) که استاندارد اصلی انتقال داده در وب و APIهاست، ساختاری تقریباً مشابه دیکشنری پایتون دارد. پایتون با کتابخانه داخلی json این ارتباط را ساده کرده است:
import json
# تبدیل دیکشنری به رشته JSON (برای ارسال به وب)
data_dict = {"name": "AI Model", "version": 2.0}
json_str = json.dumps(data_dict)
# تبدیل JSON به دیکشنری (برای پردازش)
parsed_data = json.loads(json_str)
چالش کار با دادههای انبوه (Big Data)
مشکل زمانی شروع میشود که دیکشنریهای شما دیگر چند خط ساده نیستند. در پروژههای تحلیل داده و یادگیری ماشین (Machine Learning)، شما با فایلهای JSON یا دیکشنریهای تودرتوی غولپیکری سروکار دارید که هزاران کلید و پارامتر دارند. دیباگ کردن و مشاهده ساختار این دادهها در نرمافزارهای معمولی (مثل VS Code یا Terminal) عذابآور است و سیستم شما را کند میکند.
اینجاست که استاندارد جهانی تغییر میکند. متخصصان داده برای مدیریت این دیکشنریهای پیچیده و آموزش مدلهای هوش مصنوعی، از ژوپیتر لب (Jupyter Lab) استفاده میکنند. این محیط به شما اجازه میدهد دیکشنریها را بهصورت تعاملی و ویژوال ببینید، سلولبهسلول کد بزنید و خروجی را در لحظه تحلیل کنید.
اطلاعات بیشتر و دقیقتر درباره سرور ژوپیتر لب و کاربردهای آن را میتوانید در مقاله تکمیلی زیر مطالعه کنید
دسترسی به ژوپیتر لب بدون هزینه سختافزار
اجرای ژوپیتر لب روی سیستم شخصی برای پروژههای سنگین، نیازمند رم بالا و کارت گرافیک قدرتمند است. اما راهکار خلاقانهتر آن استفاده از سرورهای ابری ژوپیتر است.
شما میتوانید با استفاده از سرور ژوپیتر لب ابر فردوسی، دقیقاً به همان محیطی دسترسی داشته باشید که مهندسان گوگل و متا برای توسعه مدلهای زبانی (LLMs) استفاده میکنند، اما با هزینهای باورنکردنی و بدون نیاز به خرید سیستمهای چند صد میلیونی!
چند مزیّت سرور ژوپیتر لب ابر فردوسی؟
- شروع ارزان و منعطف: دسترسی به قدرتمندترین گرافیکها (RTX و Tesla) تنها از ساعتی ۲۰ هزار تومان.
- پرداخت بهاندازه مصرف: هر وقت کارتان با دیکشنریها و مدلها تمام شد، سرور را خاموش کنید تا هزینهای برایتان نیفتد (با تضمین حفظ کامل دادهها).
- بازارچه ابری هوشمند: دیگر درگیر نصب کتابخانههای پایتون و ارورهای pip install نشوید؛ پکیجهای مورد نیازتان تنها با یک کلیک نصب میشوند.
- منابع نامحدود: از رندرینگ سنگین با سری RTX تا آموزش مدلهای غولپیکر با سری H و اینترنت پرسرعت
جمعبندی
ما در این مقاله از مقدمات آموزش دیکشنری در پایتون تا تکنیکهای پیشرفته آن را بررسی کردیم. یاد گرفتیم که دیکشنریها فقط محلی برای ذخیره داده نیستند؛ آنها ستون فقرات مدیریت داده در پایتون، ساختار اصلی فایلهای JSON و ابزار قدرتمند تحلیلگران داده هستند.
مرور کردیم که:
- چگونه با آکولاد {} یا dict() دیکشنری بسازیم.
- چطور با متد .get() از شر خطاهای KeyError خلاص شویم.
- تفاوتهای بنیادی آن با لیست را شناختیم (سرعت دسترسی بالا در مقابل ترتیب ایندکسها).
- و با مفاهیم مدرنی مثل Dictionary Comprehension و ادغام با | آشنا شدیم.
حالا شما بگویید: در پروژههای خود بیشتر از لیست استفاده میکنید یا دیکشنری؟ آیا ترفند دیگری برای کار با دیکشنریها میشناسید که در این لیست نبود؟ خوشحال میشویم تجربیات یا سؤالات فنی خود را در بخش نظرات با ما و سایر خوانندگان به اشتراک بگذارید.
منابع:
realpython | w3schools | programiz | peps.python
سؤالات متداول
پایتون دیکشنری چیست؟
دیکشنری در پایتون (Python Dictionary) یک نوع داده (Data Type) است که اطلاعات را بهصورت جفتهای «کلید: مقدار» (Key: Value) ذخیره میکند. این ساختار تغییرپذیر (Mutable) است، یعنی میتوان آیتمهای آن را تغییر داد و برخلاف لیست که با اعداد ایندکسگذاری میشود با کلیدهای اختصاصی خودش فراخوانی میشود.
آیا میتوانیم از یک لیست (List) بهعنوان کلید دیکشنری استفاده کنیم؟
خیر. کلیدهای دیکشنری باید تغییرناپذیر (Immutable) باشند. چون لیستها قابل تغییر هستند، نمیتوانند هش (Hash) شوند و بهعنوان کلید استفاده شوند. اما میتوانید از تاپل (Tuple) که تغییرناپذیر است بهعنوان کلید استفاده کنید.
چگونه یک دیکشنری را براساس مقادیر (Values) مرتب کنیم؟
دیکشنریها ذاتاً ترتیب خاصی برای مقادیر ندارند، اما برای نمایش مرتب آنها میتوانید از تابع sorted() به همراه یک تابع lambda استفاده کنید:
sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[1]))
تفاوت دستور del و متد pop() در حذف آیتم چیست؟
متد pop(key) آیتم را حذف میکند و مقدار آن را به شما برمیگرداند تا بتوانید در متغیری ذخیره کنید. اما دستور del dict[key] آیتم را بدون هیچ خروجی و بازگشتی حذف میکند. اگر به مقدار حذفشده نیاز دارید، حتماً از pop استفاده کنید.
سریعترین راه برای ادغام دو دیکشنری چیست؟
در پایتون ۳.۹ و نسخههای جدیدتر، سریعترین و تمیزترین راه استفاده از عملگر پایپ (|) است: new_dict = dict1 | dict2. در نسخههای قدیمیتر باید از متد .update() یا عملگر ** استفاده کنید.

