دیکشنریها در پایتون یکی از ساختارهای دادهای کلیدی برای مدیریت اطلاعات هستند. این نوع داده به شما امکان میدهد مقادیر را با کلیدهای منحصربهفرد مرتبط کنید و بهجای جستوجوی ترتیبی، مستقیماً به داده موردنظر دسترسی داشته باشید. چنین قابلیتی در بسیاری از کاربردهای روزمره مانند ذخیره تنظیمات، نگهداری اطلاعات کاربران، شمارش عناصر، و پردازش دادههای ساختیافته بسیار مؤثر است.
در این مطلب، با اصول پایهای دیکشنریها، روشهای تعریف و ویرایش آنها، متدهای مهم، و نکات حرفهای برای استفاده بهینه آشنا خواهید شد. هدف این مطلب ارائه یک منبع آموزشی کاربردی و قابل استفاده مجدد برای توسعهدهندگان، دانشجویان، و علاقهمندان به زبان پایتون است.
ساختار دیکشنری در پایتون
دیکشنری در پایتون مجموعهای از زوجهای «کلید-مقدار» است که با استفاده از آکولاد {} تعریف میشود. هر کلید باید منحصربهفرد و قابل هش باشد (مانند رشتهها، اعداد، یا تاپلهای بدون تغییر)، در حالی که مقدار میتواند هر نوع دادهای باشد.
نحوه تعریف دیکشنری
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، و ساختاردهی دادههای چندلایه نقش کلیدی دارند.
با تسلط بر دیکشنریها، میتوانید کدهایی خواناتر، سریعتر و قابل نگهداریتر بنویسید و در پروژههای پایتونی خود عملکرد بهتری داشته باشید.
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید