بعد أن تعلمنا في الدروس السابقة القوائم Lists و Tuples، نصل الآن إلى نوع مهم جدًا في بايثون وهو القواميس Dictionaries.
القاموس في Python يُستخدم لتخزين البيانات بطريقة مختلفة عن القائمة. بدل أن تصل إلى العنصر برقم الفهرس مثل list[0]، تصل إليه باستخدام مفتاح key مثل user["name"].
في هذا الدرس من سلسلة أساسيات بايثون على بايثون العرب ستتعلم ما هو Dictionary، وكيف تنشئ قاموسًا، وكيف تصل إلى القيم، وتعدلها، وتضيف عناصر جديدة، وتحذف عناصر، مع شرح أهم دوال القواميس مثل keys() و values() و items() و get().
{getToc} $title={محتوى المقال}
{alertInfo} القاموس Dictionary في بايثون يخزن البيانات على شكل مفتاح وقيمة: كل key يقابله value.
ما هو Dictionary في بايثون؟
القاموس Dictionary هو نوع بيانات في بايثون يُستخدم لتخزين مجموعة من البيانات على شكل أزواج:
key : value
يعني كل قيمة داخل القاموس لها مفتاح خاص بها.
مثال بسيط:
student = {
"name": "Ahmed",
"age": 20,
"grade": "A"
}
في هذا المثال:
"name"هو المفتاح، وقيمته"Ahmed"."age"هو المفتاح، وقيمته20."grade"هو المفتاح، وقيمته"A".
لماذا نستخدم Dictionary بدل List؟
استخدم Dictionary عندما تريد تخزين بيانات لها أسماء واضحة، وليس مجرد عناصر مرتبة بأرقام.
مثلًا لو عندك بيانات طالب، استخدام القاموس أوضح بكثير:
student = {
"name": "Sara",
"age": 19,
"city": "Amman"
}
بدل أن تحفظها في List وتضطر تتذكر أن الاسم في الفهرس 0 والعمر في الفهرس 1:
student = ["Sara", 19, "Amman"]
{alertSuccess} استخدم Dictionary عندما تكون البيانات عبارة عن خصائص واضحة مثل: الاسم، العمر، المدينة، السعر، الحالة، الدرجة.
طريقة إنشاء Dictionary في Python
لإنشاء قاموس في بايثون نستخدم الأقواس المعقوفة {}، ونكتب داخلها المفاتيح والقيم.
user = {
"username": "arabpython",
"email": "info@example.com",
"active": True
}
لاحظ أن:
- القاموس يبدأ بـ
{وينتهي بـ}. - كل عنصر يتكون من مفتاح وقيمة.
- نضع نقطتين
:بين المفتاح والقيمة. - نضع فاصلة
,بين كل عنصر والآخر.
الوصول إلى قيمة داخل Dictionary باستخدام المفتاح
للوصول إلى قيمة داخل القاموس، نكتب اسم القاموس ثم المفتاح داخل أقواس مربعة [].
student = {
"name": "Ahmed",
"age": 20,
"grade": "A"
}
print(student["name"])
الناتج:
Ahmed
هنا لم نستخدم رقم الفهرس مثل القائمة، بل استخدمنا المفتاح "name".
الفرق بين الفهرس في List والمفتاح في Dictionary
في القائمة List تصل إلى العنصر باستخدام رقم:
names = ["Ali", "Sara", "Omar"]
print(names[0])
أما في Dictionary فتصل إلى القيمة باستخدام مفتاح:
user = {
"name": "Ali",
"city": "Sanaa"
}
print(user["city"])
الناتج:
Sanaa
{alertInfo} في List نستخدم index مثل 0 و 1 و 2، أما في Dictionary نستخدم key مثل "name" و "age" و "city".
استخدام get() للوصول إلى القيم بأمان
إذا حاولت الوصول إلى مفتاح غير موجود باستخدام الأقواس المربعة، سيظهر خطأ KeyError.
user = {
"name": "Ali",
"city": "Sanaa"
}
print(user["age"])
سيظهر خطأ لأن المفتاح "age" غير موجود.
الأفضل في كثير من الحالات استخدام get():
user = {
"name": "Ali",
"city": "Sanaa"
}
print(user.get("age"))
الناتج:
None
ويمكنك وضع قيمة افتراضية تظهر عند عدم وجود المفتاح:
user = {
"name": "Ali",
"city": "Sanaa"
}
print(user.get("age", "العمر غير موجود"))
الناتج:
العمر غير موجود
{alertWarning} إذا لم تكن متأكدًا أن المفتاح موجود داخل القاموس، استخدم get() بدل الأقواس [] لتجنب KeyError.
تعديل قيمة داخل Dictionary
لتعديل قيمة موجودة داخل القاموس، نستخدم المفتاح ونضع له قيمة جديدة.
student = {
"name": "Ahmed",
"grade": "B"
}
student["grade"] = "A"
print(student)
الناتج:
{'name': 'Ahmed', 'grade': 'A'}
إضافة عنصر جديد إلى Dictionary
إذا كتبت مفتاحًا جديدًا غير موجود، سيتم إضافته إلى القاموس.
student = {
"name": "Ahmed",
"age": 20
}
student["city"] = "Amman"
print(student)
الناتج:
{'name': 'Ahmed', 'age': 20, 'city': 'Amman'}
حذف عنصر من Dictionary
يمكن حذف عنصر من القاموس باستخدام pop() أو باستخدام del.
الحذف باستخدام pop()
student = {
"name": "Ahmed",
"age": 20,
"city": "Amman"
}
student.pop("city")
print(student)
الناتج:
{'name': 'Ahmed', 'age': 20}
الحذف باستخدام del
student = {
"name": "Ahmed",
"age": 20
}
del student["age"]
print(student)
الناتج:
{'name': 'Ahmed'}
فحص وجود مفتاح داخل Dictionary
يمكنك استخدام in لمعرفة هل المفتاح موجود داخل القاموس أم لا.
user = {
"name": "Ali",
"email": "ali@example.com"
}
if "email" in user:
print("البريد موجود")
else:
print("البريد غير موجود")
الناتج:
البريد موجود
استخدام keys() لعرض المفاتيح
الدالة keys() تعرض مفاتيح القاموس.
student = {
"name": "Sara",
"age": 19,
"grade": "A"
}
print(student.keys())
الناتج:
dict_keys(['name', 'age', 'grade'])
استخدام values() لعرض القيم
الدالة values() تعرض القيم الموجودة داخل القاموس.
student = {
"name": "Sara",
"age": 19,
"grade": "A"
}
print(student.values())
الناتج:
dict_values(['Sara', 19, 'A'])
استخدام items() لعرض المفاتيح والقيم معًا
الدالة items() تعرض كل مفتاح مع قيمته.
student = {
"name": "Sara",
"age": 19,
"grade": "A"
}
print(student.items())
الناتج:
dict_items([('name', 'Sara'), ('age', 19), ('grade', 'A')])
التكرار على Dictionary باستخدام for loop
يمكنك استخدام حلقة for للمرور على مفاتيح القاموس.
student = {
"name": "Sara",
"age": 19,
"grade": "A"
}
for key in student:
print(key)
الناتج:
name
age
grade
ولو أردت طباعة المفتاح والقيمة معًا:
student = {
"name": "Sara",
"age": 19,
"grade": "A"
}
for key, value in student.items():
print(key, value)
الناتج:
name Sara
age 19
grade A
مثال عملي: قاموس بيانات طالب
في هذا المثال سننشئ قاموسًا يحتوي على بيانات طالب، ثم نطبع بياناته بطريقة واضحة.
student = {
"name": "Ahmed",
"age": 20,
"major": "Computer Science",
"grade": "A"
}
print("الاسم:", student["name"])
print("العمر:", student["age"])
print("التخصص:", student["major"])
print("التقدير:", student["grade"])
الناتج:
الاسم: Ahmed
العمر: 20
التخصص: Computer Science
التقدير: A
مثال عملي: قاموس أسعار منتجات
يمكن استخدام Dictionary لتخزين أسماء المنتجات وأسعارها.
prices = {
"laptop": 800,
"mouse": 20,
"keyboard": 50
}
print(prices["mouse"])
الناتج:
20
ويمكن تعديل السعر بسهولة:
prices["mouse"] = 25
print(prices["mouse"])
الناتج:
25
جدول سريع لأهم دوال Dictionary
| الدالة | ماذا تفعل؟ | مثال |
|---|---|---|
get() |
تجلب قيمة مفتاح بدون إظهار خطأ إذا لم يكن موجودًا | user.get("name") |
keys() |
تعرض جميع المفاتيح | user.keys() |
values() |
تعرض جميع القيم | user.values() |
items() |
تعرض المفاتيح والقيم معًا | user.items() |
pop() |
تحذف عنصرًا باستخدام المفتاح | user.pop("age") |
clear() |
تحذف كل عناصر القاموس | user.clear() |
أخطاء شائعة عند استخدام Dictionaries
1. نسيان علامات الاقتباس حول المفتاح النصي
خطأ:
user = {
"name": "Ali"
}
print(user[name])
الصحيح:
user = {
"name": "Ali"
}
print(user["name"])
2. طلب مفتاح غير موجود
خطأ:
user = {
"name": "Ali"
}
print(user["age"])
الأفضل:
user = {
"name": "Ali"
}
print(user.get("age", "العمر غير موجود"))
3. الخلط بين List و Dictionary
في List تستخدم رقم الفهرس:
names = ["Ali", "Sara"]
print(names[0])
وفي Dictionary تستخدم المفتاح:
user = {
"name": "Ali"
}
print(user["name"])
{alertError} أكثر خطأ شائع مع Dictionary هو طلب مفتاح غير موجود، وهذا يؤدي غالبًا إلى KeyError.
متى تستخدم Dictionary؟
استخدم القاموس عندما تكون البيانات عبارة عن خصائص مرتبطة بشيء واحد.
أمثلة مناسبة:
- بيانات مستخدم: الاسم، البريد، العمر.
- بيانات طالب: الاسم، الدرجة، المادة.
- منتج في متجر: الاسم، السعر، الكمية.
- إعدادات برنامج: اللغة، الوضع الليلي، حجم الخط.
- نتيجة إحصائية: عدد المقالات، عدد الزيارات، عدد التعليقات.
الفرق بين List و Tuple و Dictionary
| النوع | طريقة الكتابة | الوصول للعنصر | هل يمكن التعديل؟ | متى أستخدمه؟ |
|---|---|---|---|---|
| List | [1, 2, 3] |
باستخدام index | نعم | عندما تريد قائمة عناصر قابلة للتعديل |
| Tuple | (1, 2, 3) |
باستخدام index | لا | عندما تريد بيانات ثابتة |
| Dictionary | {"name": "Ali"} |
باستخدام key | نعم | عندما تريد بيانات باسم وقيمة |
تدريب بسيط على Dictionary
جرّب كتابة قاموس يحتوي على بيانات كتاب:
- العنوان
- المؤلف
- عدد الصفحات
- السعر
الحل:
book = {
"title": "Learn Python",
"author": "Arab Python",
"pages": 250,
"price": 15
}
print(book["title"])
print(book["price"])
أسئلة شائعة
ما هو Dictionary في بايثون؟
هو نوع بيانات يخزن المعلومات على شكل مفتاح وقيمة، مثل "name": "Ali".
ما الفرق بين List و Dictionary؟
في List تصل إلى العنصر باستخدام رقم الفهرس، أما في Dictionary تصل إلى القيمة باستخدام المفتاح.
هل يمكن تعديل Dictionary؟
نعم، يمكن تعديل القيم وإضافة عناصر جديدة وحذف عناصر من القاموس.
ماذا يحدث إذا طلبت مفتاحًا غير موجود؟
إذا استخدمت الأقواس [] سيظهر خطأ KeyError. أما إذا استخدمت get() فسيعيد None أو قيمة افتراضية تحددها.
هل يمكن أن تكون قيمة Dictionary قائمة؟
نعم، يمكن أن تكون القيمة نصًا أو رقمًا أو قائمة أو قاموسًا آخر أو أي نوع بيانات آخر.
روابط مهمة من بايثون العرب
- أساسيات بايثون 16: شرح القوائم Lists في Python للمبتدئين
- أساسيات بايثون 17: شرح Tuples في Python والفرق بينها وبين Lists
- مشكلة وحل 11: حل مشكلة object is not subscriptable في بايثون
- أساسيات بايثون 12: شرح Loops في Python
- أساسيات بايثون 14: شرح return في الدوال
مصدر خارجي مفيد
الخلاصة
القواميس Dictionaries من أهم أنواع البيانات في بايثون، وتُستخدم لتخزين البيانات على شكل مفتاح وقيمة. بدل الوصول إلى العناصر برقم الفهرس كما في List، نصل إلى القيم باستخدام مفاتيح واضحة مثل "name" أو "age".
تعلمت في هذا الدرس كيف تنشئ Dictionary، وكيف تصل إلى القيم، وتستخدم get()، وتضيف عناصر، وتعدلها، وتحذفها، وتستخدم أهم الدوال مثل keys() و values() و items().
{alertSuccess} القاعدة الذهبية: إذا كانت بياناتك لها أسماء واضحة مثل name و age و price، فغالبًا Dictionary هو الاختيار المناسب.
المقال المقترح التالي
بعد هذا الدرس، المقال التالي المناسب جدًا هو:
مشكلة وحل 12: حل مشكلة KeyError في بايثون
لأن خطأ KeyError مرتبط مباشرة بالقواميس، ويظهر عندما تطلب مفتاحًا غير موجود داخل Dictionary.