تعریف دیکشنری (Dictionary) در پایتون
جلسه هفتم - دیکشنری (Dictionary) در پایتون
مرجع کامل: تعریف، ویژگیها، متدها، اضافه کردن و حذف کردن - کدها قابل کپی هستند.
تعریف دیکشنری (Dictionary) در پایتون
دیکشنری یک ساختار داده در پایتون است که دادهها را بهصورت کلید و مقدار (key-value) نگهداری میکند. یعنی هر مقدار (value) با یک کلید (key) مخصوص خودش ذخیره میشود.
student = {
"name": "Fatemeh",
"age": 21,
"major": "Computer Science"
}
- اجزای دیکشنری:
"name", "age", "major"- کلیدها (keys)"Fatemeh", 21, "Computer Science"- مقدارها (values)
قالب کلی
دیکشنریها با براکت {} تعریف میشوند و شامل زوج کلید : مقدار هستند:
dictionary_name = {
key1: value1,
key2: value2,
key3: value3
}
کلید (key):
- باید یکتا باشد (duplicate نباشد)
- نوعش باید immutable باشد، یعنی تغییرناپذیر (مثل عدد، رشته، تاپل)
مقدار (value):
- میتواند هر نوع داده باشد (int, float, string, list, dict و …)
- میتواند تکراری باشد
ویژگیهای دیکشنریها
1. ترتیب داشتن
از نسخهی 3.7 پایتون به بعد، دیکشنریها ترتیب درج شدن عناصرشون رو حفظ میکنن. یعنی اگر کلیدها رو بهترتیب اضافه کنی، موقع چاپ هم به همون ترتیب دیده میشن.
2. دسترسی با اندیس
دیکشنری مثل لیست یا تاپل با شماره (index) کار نمیکنه. در عوض با کلیدها (key) سر و کار داره. یعنی
برای گرفتن مقدار باید بنویسی dict["key"] نه dict[0].
3. قابل تغییر بودن (Mutable)
میتونی مقدار یک کلید رو عوض کنی یا کلید جدید بهش اضافه کنی.
4. پذیرش مقادیر تکراری
کلیدها باید منحصربهفرد باشن (یعنی دو تا کلید همنام نمیتونی داشته باشی)، اما مقدارها میتونن تکراری باشن.
بررسی وجود کلید (key) در دیکشنری
برای اینکه بفهمیم یک کلید خاص داخل دیکشنری هست یا نه، از عملگر in استفاده میکنیم.
ساختار کلی:
key in dictionary
اگر اون کلید داخل دیکشنری باشه، مقدار True برمیگرده. اگر نباشه، False برمیگرده.
مثال ساده:
info = {
"name": "Fatemeh",
"city": "Tehran",
"age": 21
}
print("city" in info)
print("Tehran" in info)
output:
True
False
توضیح:
"city"یک کلید هست → پس نتیجه True"Tehran"یک مقدار هست، نه کلید → پس False
نکتهی خیلی مهم:
in فقط وجود کلیدها رو بررسی میکنه، نه مقدارها. اگر بخوای وجود مقدار رو
چک کنی باید بنویسی:
print("Tehran" in info.values())
Output:
True
نکات مهم:
- عبارت
key in dictفقط کلیدها رو بررسی میکنه - برای بررسی مقدارها باید از
.values()استفاده کنی - برای بررسی همزمان کلید و مقدارها میتونی از
.items()کمک بگیری:
print(("city", "Tehran") in info.items()) # True
- اگر بخوای بهصورت ایمن مقدار کلیدی رو بگیری، از
.get()استفاده کن تا برنامه خطا نده:
print(info.get("country", "کلید پیدا نشد"))
اضافه کردن کلید و مقدار جدید به دیکشنری
اضافه کردن عضو جدید به دیکشنری تو پایتون خیلی راحته! کافیه اسم دیکشنری رو بنویسی و داخل براکت کلید جدید رو قرار بدی، بعد با = مقدارش رو مشخص کنی.
ساختار کلی:
dict_name[new_key] = new_value
مثال: برنامهای بنویسید که یک دیکشنری شامل نام و سن بسازد و سپس کلید جدیدی به نام "city" با مقدار "Tehran" به انتهای دیکشنری اضافه کند و در نهایت دیکشنری را چاپ نماید.
student = {
"name": "Fatemeh",
"age": 21
}
student["city"] = "Tehran"
print(student)
output:
{'name': 'Fatemeh', 'age': 21, 'city': 'Tehran'}
همانطور که میبینی، کلید "city" با مقدار "Tehran" به انتهای دیکشنری اضافه شد.
نکات مهم:
- ترتیب حفظ میشه: از پایتون نسخهی 3.7 به بعد، دیکشنریها ترتیب درج عناصر رو نگه میدارن. یعنی هر کلیدی که جدید اضافه میکنی، در آخر دیکشنری قرار میگیره.
- اگر کلید از قبل وجود داشته باشه: مقدارش بهروزرسانی (update) میشه، نه اینکه کلید جدید ساخته بشه. مثلا:
student["age"] = 22 # مقدار age تغییر میکند
- اضافه کردن چند عضو باهم: میتونی از متد
update()استفاده کنی:
student.update({"major": "CS", "grade": "A"})
این متد اگر کلید جدید باشه اضافه میکنه و اگر موجود باشه، مقدارش رو تغییر میده.
مثال: برنامهای بنویسید که بهصورت نامتناهی از کاربر نام و نمره بگیرد و آنها را در یک دیکشنری ذخیره کند. وقتی کاربر کلمهی "exit" را وارد کند، برنامه متوقف شود و در نهایت دیکشنری کامل چاپ شود.
students = {}
while True:
name = input("Enter student name (or type 'exit' to quit): ")
if name.lower() == "exit":
break
score = float(input("Enter the score: "))
students[name] = score
print("\n Student list with scores:")
print(students)
output:
Enter student name (or type 'exit' to quit): Ali
Enter the score: 19
Enter student name (or type 'exit' to quit): Fatemeh
Enter the score: 20
Enter student name (or type 'exit' to quit): exit
Student list with scores:
{'Ali': 19.0, 'Fatemeh': 20.0}
نکات مهم:
- از
while Trueبرای گرفتن ورودی بینهایت استفاده شده - با
if name.lower() == "exit": breakحلقه متوقف میشه - هر اسم (key) فقط یک نمره (value) داره و اگر تکرار بشه، مقدارش بهروزرسانی میشه
متدهای دیکشنری
keys()
توضیح: تمام کلیدهای دیکشنری را برمیگرداند.
ساختار کلی:
dictionary.keys()
مثال: تمام کلیدهای دیکشنری student را چاپ کنید.
student = {"name": "Fatemeh", "age": 21, "city": "Tehran"}
print(student.keys())
output:
dict_keys(['name', 'age', 'city'])
نکات مهم:
- خروجی
dict_keysاست و میتوان باlist()به لیست تبدیل کرد - تنها کلیدها را برمیگرداند
values()
توضیح: تمام مقادیر دیکشنری را برمیگرداند.
ساختار کلی:
dictionary.values()
مثال: تمام مقادیر دیکشنری student را چاپ کنید.
student = {"name": "Fatemeh", "age": 21, "city": "Tehran"}
print(student.values())
output:
dict_values(['Fatemeh', 21, 'Tehran'])
نکات مهم:
- خروجی
dict_valuesاست - برای بررسی وجود مقدار میتوان از
"Tehran" in student.values()استفاده کرد
items()
توضیح: تمام زوج کلید-مقدار دیکشنری را برمیگرداند.
ساختار کلی:
dictionary.items()
مثال: زوج کلید و مقدار دیکشنری student را چاپ کنید.
student = {"name": "Fatemeh", "age": 21, "city": "Tehran"}
print(student.items())
output:
dict_items([('name', 'Fatemeh'), ('age', 21), ('city', 'Tehran')])
نکات مهم:
- خروجی
dict_itemsاست - قابل پیمایش با حلقه
for key, value in dictionary.items()
pop()
توضیح: کلید مشخصی را حذف و مقدار آن را برمیگرداند.
ساختار کلی:
dictionary.pop(key, default_value)
مثال: کلید "age" را از دیکشنری student حذف کنید و مقدارش را چاپ کنید.
student = {"name": "Fatemeh", "age": 21, "city": "Tehran"}
removed = student.pop("age")
print(removed)
print(student)
output:
21
{'name': 'Fatemeh', 'city': 'Tehran'}
نکات مهم:
- اگر کلید موجود نباشد، خطا میدهد، مگر مقدار پیشفرض بدهید
- مشابهت: با
popitem()مشابهت دارد ولیpop()کلید خاص را حذف میکند
update()
توضیح: کلیدهای جدید اضافه یا مقادیر موجود را بهروزرسانی میکند.
ساختار کلی:
dictionary.update({key1: value1, key2: value2, ...})
مثال: کلیدهای "major" و "grade" را اضافه و مقدار "age" را تغییر دهید.
student = {"name": "Fatemeh", "age": 21}
student.update({"major": "CS", "grade": "A", "age": 22})
print(student)
output:
{'name': 'Fatemeh', 'age': 22, 'major': 'CS', 'grade': 'A'}
نکات مهم:
- کلید موجود → مقدار بهروزرسانی میشود
- کلید جدید → اضافه میشود
clear()
توضیح: همه عناصر دیکشنری را حذف میکند.
ساختار کلی:
dictionary.clear()
مثال: تمام محتویات دیکشنری student را حذف کنید.
student = {"name": "Fatemeh", "age": 21}
student.clear()
print(student)
output:
{}
نکات مهم:
- دیکشنری خالی میشود اما خود دیکشنری باقی میماند
- مشابهت: با
del dictionaryعناصر حذف میشوند ولیdelدیکشنری را هم پاک میکند
get()
توضیح: مقدار کلید مشخص را برمیگرداند یا مقدار پیشفرض اگر کلید موجود نباشد.
ساختار کلی:
dictionary.get(key, default_value)
مثال: مقدار کلید "city" را چاپ کنید، اگر وجود نداشت "Not found" چاپ شود.
student = {"name": "Fatemeh", "age": 21}
print(student.get("city", "Not found"))
output:
Not found
نکات مهم:
- امنتر از دسترسی مستقیم
dictionary[key]است - مشابهت: میتوان وجود کلید را قبل از دسترسی بررسی کرد ولی
get()مقدار را برمیگرداند
setdefault()
توضیح: کلید جدید با مقدار مشخص اضافه میکند؛ اگر کلید موجود باشد مقدار تغییر نمیکند.
ساختار کلی:
dictionary.setdefault(key, default_value)
مثال: کلید "city" را با مقدار "Tehran" اضافه کنید، اگر کلید موجود باشد تغییر نکند.
student = {"name": "Fatemeh", "age": 21}
student.setdefault("city", "Tehran")
print(student)
output:
{'name': 'Fatemeh', 'age': 21, 'city': 'Tehran'}
نکات مهم:
- تنها کلیدهای جدید اضافه میشوند، مقدار موجود تغییر نمیکند
- مشابهت و تفاوت با
get():- هر دو میتوانند کلید موجود را بررسی کنند
get()فقط مقدار برمیگرداند و تغییری در دیکشنری نمیدهدsetdefault()در صورت نبود کلید، کلید و مقدار را اضافه میکند
💡 تمرینها و سوالات
سوال 1: ساخت دیکشنری ساده
دیکشنریای بسازید با کلیدهای "name"، "age" و "city" و مقادیر دلخواه.
# خروجی: {'name': 'Ali', 'age': 25, 'city': 'Tehran'}
# راه حل:
person = {
"name": "Ali",
"age": 25,
"city": "Tehran"
}
print(person)
سوال 2: دسترسی به مقدار با کلید
از دیکشنری زیر، نام را چاپ کنید.
student = {"name": "Sara", "age": 22, "major": "Math"}
# خروجی: Sara
# راه حل:
student = {"name": "Sara", "age": 22, "major": "Math"}
print(student["name"])
سوال 3: اضافه کردن کلید جدید
به دیکشنری book، کلید "author" با مقدار "Hemingway" اضافه کنید.
book = {"title": "Old Man and Sea", "year": 1952}
# خروجی: {'title': 'Old Man and Sea', 'year': 1952, 'author': 'Hemingway'}
# راه حل:
book = {"title": "Old Man and Sea", "year": 1952}
book["author"] = "Hemingway"
print(book)
سوال 4: تغییر مقدار کلید
سن در دیکشنری person را از 25 به 26 تغییر دهید.
person = {"name": "Ali", "age": 25}
# خروجی: {'name': 'Ali', 'age': 26}
# راه حل:
person = {"name": "Ali", "age": 25}
person["age"] = 26
print(person)
سوال 5: حذف کلید با pop()
کلید "year" را از دیکشنری car حذف کنید.
car = {"brand": "Toyota", "model": "Camry", "year": 2020}
# خروجی: {'brand': 'Toyota', 'model': 'Camry'}
# راه حل:
car = {"brand": "Toyota", "model": "Camry", "year": 2020}
car.pop("year")
print(car)
سوال 6: بررسی وجود کلید
بررسی کنید که آیا کلید "email" در دیکشنری user وجود دارد یا خیر.
user = {"name": "Ahmad", "age": 30, "city": "Shiraz"}
# خروجی: False
# راه حل:
user = {"name": "Ahmad", "age": 30, "city": "Shiraz"}
result = "email" in user
print(result)
سوال 7: دریافت تمام کلیدها
تمام کلیدهای دیکشنری product را به صورت لیست چاپ کنید.
product = {"name": "Laptop", "price": 1200, "stock": 5}
# خروجی: ['name', 'price', 'stock']
# راه حل:
product = {"name": "Laptop", "price": 1200, "stock": 5}
keys = list(product.keys())
print(keys)
سوال 8: دریافت تمام مقادیر
تمام مقادیر دیکشنری scores را به صورت لیست چاپ کنید.
scores = {"math": 18, "physics": 17, "chemistry": 19}
# خروجی: [18, 17, 19]
# راه حل:
scores = {"math": 18, "physics": 17, "chemistry": 19}
values = list(scores.values())
print(values)
سوال 9: استفاده از متد get()
مقدار کلید "country" را دریافت کنید، اگر وجود نداشت "Iran" چاپ شود.
person = {"name": "Reza", "age": 28}
# خروجی: Iran
# راه حل:
person = {"name": "Reza", "age": 28}
country = person.get("country", "Iran")
print(country)
سوال 10: محاسبه تعداد کلیدها
تعداد کلیدهای موجود در دیکشنری data را چاپ کنید.
data = {"a": 1, "b": 2, "c": 3, "d": 4}
# خروجی: 4
# راه حل:
data = {"a": 1, "b": 2, "c": 3, "d": 4}
count = len(data)
print(count)
سوال 11: ترکیب دو دیکشنری با update()
دیکشنری dict2 را به dict1 اضافه کنید.
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
# خروجی: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# راه حل:
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
dict1.update(dict2)
print(dict1)
سوال 12: حذف همه عناصر با clear()
تمام عناصر دیکشنری temp را پاک کنید.
temp = {"x": 10, "y": 20, "z": 30}
# خروجی: {}
# راه حل:
temp = {"x": 10, "y": 20, "z": 30}
temp.clear()
print(temp)
سوال 13: حلقه روی کلیدها
با حلقه for روی کلیدهای دیکشنری بگردید و هر کلید را چاپ کنید.
colors = {"red": "#FF0000", "green": "#00FF00", "blue": "#0000FF"}
# خروجی:
# red
# green
# blue
# راه حل:
colors = {"red": "#FF0000", "green": "#00FF00", "blue": "#0000FF"}
for key in colors:
print(key)
سوال 14: حلقه روی مقادیر
با حلقه for روی مقادیر دیکشنری بگردید و هر مقدار را چاپ کنید.
prices = {"apple": 5, "banana": 3, "orange": 4}
# خروجی:
# 5
# 3
# 4
# راه حل:
prices = {"apple": 5, "banana": 3, "orange": 4}
for value in prices.values():
print(value)
سوال 15: حلقه روی کلید و مقدار با items()
با استفاده از items() همزمان کلید و مقدار را چاپ کنید.
grades = {"Ali": 18, "Sara": 19, "Reza": 17}
# خروجی:
# Ali: 18
# Sara: 19
# Reza: 17
# راه حل:
grades = {"Ali": 18, "Sara": 19, "Reza": 17}
for key, value in grades.items():
print(f"{key}: {value}")
سوال 16: یافتن بیشترین مقدار
بیشترین نمره را از دیکشنری scores پیدا کنید.
scores = {"math": 18, "physics": 17, "chemistry": 19, "biology": 16}
# خروجی: 19
# راه حل:
scores = {"math": 18, "physics": 17, "chemistry": 19, "biology": 16}
max_score = max(scores.values())
print(max_score)
سوال 17: شمارش تعداد کلمات در متن
با استفاده از دیکشنری، تعداد تکرار هر کلمه در لیست words را محاسبه کنید.
words = ["apple", "banana", "apple", "orange", "banana", "apple"]
# خروجی: {'apple': 3, 'banana': 2, 'orange': 1}
# راه حل:
words = ["apple", "banana", "apple", "orange", "banana", "apple"]
word_count = {}
for word in words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count)
سوال 18: معکوس کردن دیکشنری
دیکشنری را معکوس کنید (کلیدها مقدار شوند و مقادیر کلید شوند).
original = {"a": 1, "b": 2, "c": 3}
# خروجی: {1: 'a', 2: 'b', 3: 'c'}
# راه حل:
original = {"a": 1, "b": 2, "c": 3}
reversed_dict = {}
for key, value in original.items():
reversed_dict[value] = key
print(reversed_dict)
# یا با dictionary comprehension:
reversed_dict = {v: k for k, v in original.items()}
print(reversed_dict)
سوال 19: فیلتر کردن دیکشنری
فقط کلیدهایی را که مقدارشان بیشتر از 50 است در دیکشنری جدید قرار دهید.
data = {"a": 30, "b": 70, "c": 45, "d": 80, "e": 55}
# خروجی: {'b': 70, 'd': 80, 'e': 55}
# راه حل:
data = {"a": 30, "b": 70, "c": 45, "d": 80, "e": 55}
filtered = {}
for key, value in data.items():
if value > 50:
filtered[key] = value
print(filtered)
# یا با dictionary comprehension:
filtered = {k: v for k, v in data.items() if v > 50}
print(filtered)
سوال 20: ساخت دفترچه تلفن ساده
برنامهای بنویسید که از کاربر نام و شماره تلفن دریافت کند و در دیکشنری ذخیره کند. سپس تمام مخاطبین را نمایش دهد.
# نمونه ورودی:
# تعداد مخاطبین: 2
# نام: Ali
# شماره: 09121234567
# نام: Sara
# شماره: 09129876543
# خروجی:
# دفترچه تلفن:
# Ali: 09121234567
# Sara: 09129876543
# راه حل:
phonebook = {}
n = int(input("تعداد مخاطبین: "))
for i in range(n):
name = input("نام: ")
phone = input("شماره: ")
phonebook[name] = phone
print("\nدفترچه تلفن:")
for name, phone in phonebook.items():
print(f"{name}: {phone}")