دیکشنری‌ها (Dictionaries) در پایتون: راهنمای کار با داده‌های کلید-مقدار
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 5 دقیقه

دیکشنری‌ها (Dictionaries) در پایتون: راهنمای کار با داده‌های کلید-مقدار

دیکشنری‌ها در پایتون یکی از ساختارهای داده‌ای کلیدی برای مدیریت اطلاعات هستند. این نوع داده به شما امکان می‌دهد مقادیر را با کلیدهای منحصربه‌فرد مرتبط کنید و به‌جای جست‌وجوی ترتیبی، مستقیماً به داده موردنظر دسترسی داشته باشید. چنین قابلیتی در بسیاری از کاربردهای روزمره مانند ذخیره تنظیمات، نگهداری اطلاعات کاربران، شمارش عناصر، و پردازش داده‌های ساخت‌یافته بسیار مؤثر است.

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

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

دیکشنری در پایتون مجموعه‌ای از زوج‌های «کلید-مقدار» است که با استفاده از آکولاد {} تعریف می‌شود. هر کلید باید منحصربه‌فرد و قابل هش باشد (مانند رشته‌ها، اعداد، یا تاپل‌های بدون تغییر)، در حالی که مقدار می‌تواند هر نوع داده‌ای باشد.

نحوه تعریف دیکشنری

user = {"name": "Ali", "age": 30, "is_active": True}

در مثال بالا:

  • "name" ،"age" و "is_active" کلیدها هستند.
  • Ali ،30 و True مقادیر متناظر با آن‌ها هستند.

ویژگی‌های کلیدی دیکشنری‌ها

  • ترتیب عناصر از نسخه ۳.۷ به بعد حفظ می‌شود.
  • دسترسی به مقدار از طریق کلید انجام می‌شود: user["name"] → "Ali"
  • اگر کلید وجود نداشته باشد، خطای KeyError رخ می‌دهد مگر اینکه از متد امن‌تر get() استفاده شود.

تعریف دیکشنری خالی

empty_dict = {}

استفاده از تابع dict() برای ساخت دیکشنری

person = dict(name="Sara", age=25)

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

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

عملیات پایه روی دیکشنری‌ها

پس از تعریف یک دیکشنری، معمولاً نیاز داریم آن را تغییر دهیم، به داده‌ای دسترسی پیدا کنیم، یا بررسی کنیم که آیا کلیدی خاص در آن وجود دارد یا نه. در این بخش با رایج‌ترین عملیات پایه‌ای روی دیکشنری‌ها آشنا می‌شویم:

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

برای افزودن یک کلید جدید یا تغییر مقدار یک کلید موجود:

user["email"] = "ali@example.com"     # افزودن
user["age"] = 31                      # به‌روزرسانی

حذف یک کلید

برای حذف یک کلید و مقدار متناظر آن:

del user["is_active"]

بررسی وجود کلید

برای بررسی اینکه آیا یک کلید در دیکشنری وجود دارد:

"name" in user        # خروجی: True
"phone" in user       # خروجی: False

دسترسی امن با get()

برای جلوگیری از خطای KeyError هنگام دسترسی به کلیدهای ناموجود:

user.get("phone")                  # خروجی: None
user.get("phone", "نامشخص")       # خروجی: "نامشخص"

مثال ترکیبی

product = {"name": "Laptop", "price": 1500}
product["stock"] = 20
if "discount" not in product:
    product["discount"] = 0

در ادامه، با روش‌های پیمایش دیکشنری‌ها آشنا خواهیم شد.

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

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

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

for key in user:
    print(key)

یا به‌صورت صریح‌تر:

for key in user.keys():
    print(key)

پیمایش مقادیر

for value in user.values():
    print(value)

پیمایش زوج‌های کلید-مقدار

for key, value in user.items():
    print(f"{key}: {value}")

مثال عملی

user = {"name": "Ali", "age": 30, "email": "ali@example.com"}
for k, v in user.items():
    print(f"{k} → {v}")

خروجی:

name → Ali
age → 30
email → ali@example.com

توابع و متدهای مهم دیکشنری‌ها

پایتون مجموعه‌ای از متدهای داخلی برای کار با دیکشنری‌ها ارائه می‌دهد که مدیریت داده‌ها را ساده‌تر و مؤثرتر می‌سازد. در این بخش با مهم‌ترین آن‌ها آشنا می‌شویم:

len()

تعداد کلیدهای موجود در دیکشنری را برمی‌گرداند:

len(user)     # خروجی: 3

 

update()

برای افزودن یا به‌روزرسانی چند مقدار به‌صورت هم‌زمان:

user.update({"age": 32, "city": "Tehran"})

clear()

تمام محتویات دیکشنری را حذف می‌کند:

user.clear()     # خروجی: {}

pop()

یک کلید را حذف کرده و مقدار آن را برمی‌گرداند:

email = user.pop("email")

تفاوت pop() و del

  • pop() مقدار حذف‌شده را برمی‌گرداند و می‌توان آن را ذخیره کرد.
  • del فقط حذف می‌کند و چیزی برنمی‌گرداند.

مثال ترکیبی

settings = {"theme": "dark", "font": "Arial", "size": 12}
settings.pop("font")
settings.update({"size": 14, "language": "fa"})

دیکشنری‌های تو در تو (Nested Dictionaries)

در بسیاری از پروژه‌ها، داده‌ها ساختاری پیچیده و چندلایه دارند. دیکشنری‌های تو در تو در پایتون این امکان را فراهم می‌کنند که اطلاعات مرتبط را به‌صورت سلسله‌مراتبی سازمان‌دهی کنیم.

تعریف دیکشنری چندلایه

users = {
    "user1": {"name": "Ali", "age": 30},
    "user2": {"name": "Sara", "age": 25}
}

در این مثال:

  • users یک دیکشنری اصلی است.
  • هر مقدار آن، خود یک دیکشنری شامل اطلاعات کاربر است.

دسترسی به داده‌های داخلی

users["user1"]["name"]     # خروجی: "Ali"
users["user2"]["age"]      # خروجی: 25

افزودن یا تغییر مقدار در لایه داخلی

users["user1"]["email"] = "ali@example.com"

مثال عملی

inventory = {
    "laptop": {"price": 1500, "stock": 10},
    "phone": {"price": 800, "stock": 25}
}
for item, info in inventory.items():
    print(f"{item} → قیمت: {info['price']} | موجودی: {info['stock']}")

خروجی:

laptop → قیمت: 1500 | موجودی: 10
phone → قیمت: 800 | موجودی: 25

نکات پیشرفته و حرفه‌ای

دیکشنری‌ها در پایتون فراتر از عملیات پایه، ابزارهایی قدرتمند برای مدیریت داده‌های پیچیده و بهینه‌سازی کد ارائه می‌دهند. در این بخش با چند قابلیت حرفه‌ای آشنا می‌شویم:

استفاده از defaultdict

از ماژول collections برای تعریف دیکشنری‌هایی با مقدار پیش‌فرض:

from collections import defaultdict

scores = defaultdict(int)
scores["Ali"] += 1     # مقدار اولیه 0 در نظر گرفته می‌شود

شمارش با Counter

برای شمارش عناصر تکراری مانند کلمات یا اعداد:

from collections import Counter

words = ["apple", "banana", "apple", "orange", "banana"]
counter = Counter(words)
print(counter)     # خروجی: {'apple': 2, 'banana': 2, 'orange': 1}

مرتب‌سازی دیکشنری با sorted()

مرتب‌سازی بر اساس کلید یا مقدار:

data = {"b": 2, "a": 3, "c": 1}
sorted_by_key = dict(sorted(data.items()))
sorted_by_value = dict(sorted(data.items(), key=lambda item: item[1]))

فریز کردن دیکشنری با MappingProxyType

برای ایجاد نسخه فقط‌خواندنی از دیکشنری:

from types import MappingProxyType

config = {"debug": True, "version": "1.0"}
readonly_config = MappingProxyType(config)
# readonly_config["debug"] = False     → خطا: قابل تغییر نیست

تمرین و مثال‌های واقعی

برای تسلط بیشتر بر دیکشنری‌ها، تمرین‌های عملی نقش مهمی دارند. در این بخش چند مثال کاربردی و قابل استفاده در پروژه‌های واقعی ارائه می‌شود:

ساخت دیکشنری از دو لیست با zip()

keys = ["name", "age", "email"]
values = ["Ali", 30, "ali@example.com"]
user = dict(zip(keys, values))

شمارش تکرار کلمات در یک متن

from collections import Counter

text = "apple banana apple orange banana apple"
words = text.split()
word_count = Counter(words)
print(word_count)

خروجی:

{'apple': 3, 'banana': 2, 'orange': 1}

تبدیل JSON به دیکشنری و بالعکس

import json

# JSON به دیکشنری
json_str = '{"name": "Sara", "age": 25}'
data = json.loads(json_str)

# دیکشنری به JSON
json_output = json.dumps(data, indent=2, ensure_ascii=False)

ساخت دیکشنری با شمارش حروف

sentence = "hello world"
char_count = {}
for char in sentence:
    if char != " ":
        char_count[char] = char_count.get(char, 0) + 1

جمع‌بندی

دیکشنری‌ها یکی از انعطاف‌پذیرترین و قدرتمندترین ساختارهای داده در پایتون هستند. با استفاده از آن‌ها می‌توان داده‌ها را به‌صورت کلید-مقدار سازمان‌دهی کرد، به‌سرعت به اطلاعات دسترسی یافت، و ساختارهای پیچیده‌تری مانند دیکشنری‌های تو در تو یا شمارنده‌های خودکار ایجاد نمود.

نکات کلیدی:

  • هر کلید باید منحصربه‌فرد و قابل هش باشد؛ مقدارها می‌توانند از هر نوع داده‌ای باشند.
  • متدهایی مانند get() ،update() ،pop() و items() ابزارهای قدرتمندی برای مدیریت داده‌ها هستند.
  • ابزارهای پیشرفته مانند defaultdict ،Counter و MappingProxyType امکانات حرفه‌ای‌تری برای کنترل و پردازش داده‌ها فراهم می‌کنند.
  • دیکشنری‌ها در بسیاری از کاربردهای واقعی مانند شمارش، نگهداری تنظیمات، پردازش JSON، و ساختاردهی داده‌های چندلایه نقش کلیدی دارند.

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

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@arastoo
ارسطو عباسی
کارشناس تولید و بهینه‌سازی محتوا

...

دیدگاه و پرسش
برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

ارسطو عباسی

کارشناس تولید و بهینه‌سازی محتوا