مرحبًا بك في الدرس العاشر من سلسلة أساسيات بايثون على موقع عرب بايثون.
في الدروس السابقة تعلمنا أنواعًا مهمة من البيانات مثل القوائم Lists والمجموعات Sets. واليوم سنتعلم نوعًا مهمًا جدًا في بايثون اسمه:
{getToc} $title={محتوى المقال}
Dictionary أو بالعربي: القاموس.
القاموس في بايثون يستخدم لتخزين البيانات على شكل مفتاح وقيمة، وهذا يجعله مناسبًا جدًا لتخزين بيانات منظمة مثل بيانات طالب، منتج، مستخدم، إعدادات برنامج، أو نتيجة قادمة من API.
إذا لم تقرأ الدروس السابقة، أنصحك تبدأ من: شرح Lists في Python و شرح Sets في Python.
ما هو Dictionary في بايثون؟
الـ dictionary هو نوع بيانات يستخدم لتخزين المعلومات على شكل أزواج:
"key": "value"
يعني كل معلومة لها اسم يدل عليها.
مثال بسيط:
student = {
"name": "Ahmed",
"age": 20,
"city": "Amman"
}
print(student)
في هذا المثال:
nameهو المفتاح، وقيمتهAhmed.ageهو المفتاح، وقيمته20.cityهو المفتاح، وقيمتهAmman.
شكل Dictionary في Python
القاموس يُكتب داخل أقواس معقوفة:
{ }
وكل عنصر داخله يكون على شكل:
"key": "value"
مثال:
car = {
"brand": "Toyota",
"model": "Corolla",
"year": 2024
}
لماذا نستخدم Dictionary؟
استخدام القاموس يجعل البيانات أوضح وأسهل في القراءة.
مثلاً، تخيل أنك تريد تخزين بيانات طالب باستخدام قائمة:
student = ["Ahmed", 20, "Amman"]
هنا قد تفهم أن Ahmed هو الاسم، و 20 هو العمر، لكن الكود لا يوضح ذلك مباشرة.
أما باستخدام Dictionary:
student = {
"name": "Ahmed",
"age": 20,
"city": "Amman"
}
البيانات أصبحت أوضح بكثير، لأن كل قيمة لها اسم يدل عليها.
الوصول إلى قيمة داخل Dictionary
للوصول إلى قيمة داخل القاموس، نستخدم اسم المفتاح بين أقواس مربعة:
student = {
"name": "Ahmed",
"age": 20,
"city": "Amman"
}
print(student["name"])
الناتج:
Ahmed
هنا طلبنا من بايثون قيمة المفتاح name.
الوصول إلى قيمة باستخدام get
يمكنك أيضًا الوصول إلى قيمة باستخدام الدالة get().
student = {
"name": "Ahmed",
"age": 20
}
print(student.get("name"))
الناتج:
Ahmed
ما الفرق بين الأقواس و get؟
إذا استخدمت الأقواس مع مفتاح غير موجود، سيظهر خطأ.
student = {
"name": "Ahmed"
}
print(student["age"])
هذا قد يسبب خطأ KeyError لأن المفتاح age غير موجود.
أما مع get():
student = {
"name": "Ahmed"
}
print(student.get("age"))
الناتج سيكون:
None
وهذا يجعل get() مفيدة عندما لا تكون متأكدًا أن المفتاح موجود.
تغيير قيمة داخل Dictionary
يمكنك تعديل قيمة موجودة داخل القاموس عن طريق اسم المفتاح.
student = {
"name": "Ahmed",
"age": 20
}
student["age"] = 21
print(student)
هنا عدّلنا قيمة age من 20 إلى 21.
إضافة عنصر جديد إلى Dictionary
لإضافة مفتاح جديد وقيمة جديدة، نكتب المفتاح الجديد ونساويه بالقيمة.
student = {
"name": "Ahmed",
"age": 20
}
student["city"] = "Amman"
print(student)
الآن أضفنا مفتاحًا جديدًا اسمه city.
حذف عنصر من Dictionary
لحذف عنصر من القاموس، يمكن استخدام pop().
student = {
"name": "Ahmed",
"age": 20,
"city": "Amman"
}
student.pop("city")
print(student)
الناتج سيكون القاموس بدون المفتاح city.
ويمكن أيضًا استخدام del:
del student["age"]
معرفة مفاتيح Dictionary باستخدام keys
إذا أردت عرض جميع المفاتيح داخل القاموس، استخدم keys().
student = {
"name": "Ahmed",
"age": 20,
"city": "Amman"
}
print(student.keys())
معرفة القيم باستخدام values
إذا أردت عرض القيم فقط، استخدم values().
print(student.values())
عرض المفاتيح والقيم معًا باستخدام items
الدالة items() تعرض كل مفتاح مع قيمته.
student = {
"name": "Ahmed",
"age": 20,
"city": "Amman"
}
print(student.items())
المرور على Dictionary باستخدام for
يمكنك المرور على مفاتيح القاموس باستخدام حلقة for.
student = {
"name": "Ahmed",
"age": 20,
"city": "Amman"
}
for key in student:
print(key)
هذا يطبع المفاتيح فقط.
أما إذا أردت طباعة المفتاح والقيمة معًا:
for key, value in student.items():
print(key, value)
التحقق من وجود مفتاح داخل Dictionary
يمكنك استخدام in لمعرفة هل المفتاح موجود داخل القاموس.
student = {
"name": "Ahmed",
"age": 20
}
if "name" in student:
print("المفتاح موجود")
هذه الطريقة مفيدة لتجنب خطأ KeyError.
هل يمكن تكرار المفاتيح في Dictionary؟
لا، المفاتيح داخل القاموس لا تتكرر.
إذا كتبت نفس المفتاح أكثر من مرة، سيتم اعتماد آخر قيمة.
student = {
"name": "Ahmed",
"name": "Omar"
}
print(student)
الناتج سيكون:
{'name': 'Omar'}
لذلك يجب أن تكون المفاتيح واضحة وغير مكررة.
ما أنواع البيانات التي يمكن تخزينها داخل Dictionary؟
يمكن أن تحتوي قيمة المفتاح على نص، رقم، قائمة، Boolean، أو حتى Dictionary آخر.
student = {
"name": "Ahmed",
"age": 20,
"is_active": True,
"skills": ["Python", "HTML", "CSS"]
}
print(student)
هذا يجعل القواميس قوية جدًا في تخزين البيانات المنظمة.
Dictionary داخل Dictionary
يمكنك إنشاء قاموس يحتوي على قواميس أخرى.
students = {
"student1": {
"name": "Ahmed",
"age": 20
},
"student2": {
"name": "Sara",
"age": 22
}
}
print(students)
هذا النوع يسمى أحيانًا Nested Dictionary، ويستخدم عندما تكون البيانات متعددة المستويات.
أهم دوال Dictionary في Python
| الدالة | وظيفتها |
|---|---|
get() |
ترجع قيمة مفتاح معين بدون ظهور خطأ إذا لم يكن المفتاح موجودًا. |
keys() |
ترجع جميع المفاتيح داخل القاموس. |
values() |
ترجع جميع القيم داخل القاموس. |
items() |
ترجع المفاتيح والقيم معًا. |
pop() |
تحذف عنصرًا معينًا باستخدام المفتاح. |
clear() |
تحذف جميع عناصر القاموس. |
copy() |
تنشئ نسخة من القاموس. |
مثال عملي: بيانات منتج
لنفترض أنك تريد تخزين بيانات منتج في متجر إلكتروني.
product = {
"name": "Laptop",
"price": 750,
"available": True
}
print("Product:", product["name"])
print("Price:", product["price"])
هنا القاموس مناسب جدًا لأن كل معلومة لها اسم واضح.
أخطاء شائعة عند استخدام Dictionary
الخطأ الأول: نسيان النقطتين بين المفتاح والقيمة
هذا كود خاطئ:
student = {
"name" "Ahmed"
}
الصحيح:
student = {
"name": "Ahmed"
}
الخطأ الثاني: استخدام مفتاح غير موجود
هذا قد يسبب KeyError:
student = {
"name": "Ahmed"
}
print(student["age"])
الأفضل:
print(student.get("age"))
الخطأ الثالث: تكرار نفس المفتاح بدون قصد
إذا كررت نفس المفتاح، ستبقى آخر قيمة فقط.
user = {
"name": "Ali",
"name": "Omar"
}
لذلك راجع أسماء المفاتيح جيدًا.
متى أستخدم Dictionary؟
استخدم القاموس عندما تكون البيانات عندك على شكل أسماء وقيم.
أمثلة مناسبة:
- بيانات طالب: الاسم، العمر، المدينة.
- بيانات منتج: الاسم، السعر، الحالة.
- بيانات مستخدم: اسم المستخدم، البريد، الصلاحية.
- إعدادات برنامج: اللغة، الوضع الليلي، حجم الخط.
- نتائج API أو بيانات JSON.
لكن إذا كانت البيانات مجرد قائمة عناصر مرتبة، فقد تكون list أفضل.
الفرق السريع بين List و Dictionary
| List | Dictionary |
|---|---|
| تعتمد على الأرقام والفهارس. | تعتمد على المفاتيح والقيم. |
| مناسبة لقائمة عناصر. | مناسبة لبيانات منظمة. |
| تصل للعنصر باستخدام index. | تصل للقيمة باستخدام key. |
لمراجعة الفرق بين الأنواع الأربعة، اقرأ: ما الفرق بين List و Tuple و Set و Dictionary في بايثون؟
روابط مفيدة
لفهم أنواع البيانات في بايثون، اقرأ: أساسيات بايثون 7: أنواع البيانات في Python.
ولفهم القوائم قبل القواميس، اقرأ: أساسيات بايثون 8: شرح Lists في Python.
ويمكنك الرجوع إلى توثيق بايثون الرسمي حول القواميس: Python Dictionaries Documentation.
مقالات مقترحة من عرب بايثون
- أساسيات بايثون 9: شرح Sets في Python للمبتدئين
- بايثون بالمثال: حذف التكرار من قائمة في Python
- مشكلة وحل: حل خطأ IndexError list index out of range في Python
خلاصة الدرس
في هذا الدرس تعلمنا أن Dictionary في Python هو نوع بيانات يستخدم لتخزين المعلومات على شكل مفتاح وقيمة.
وتعلمنا:
- كيف ننشئ Dictionary.
- كيف نصل إلى قيمة باستخدام المفتاح.
- الفرق بين استخدام الأقواس واستخدام
get(). - كيف نضيف ونعدل ونحذف عناصر.
- كيف نستخدم
keys()وvalues()وitems(). - كيف نمر على القاموس باستخدام
for. - أشهر الأخطاء التي تحدث مع Dictionaries.
القواميس من أهم أنواع البيانات في بايثون، وستستخدمها كثيرًا عندما تبدأ في بناء برامج حقيقية أو التعامل مع بيانات منظمة.
تمرين بسيط لك
أنشئ قاموسًا باسم book يحتوي على:
- title
- author
- pages
- available
ثم اطبع اسم الكتاب وعدد الصفحات.
ابدأ بهذا المثال:
book = {
"title": "Learn Python",
"author": "Arab Python",
"pages": 120,
"available": True
}
print(book["title"])
print(book["pages"])
في الدرس القادم
في الدرس القادم من سلسلة أساسيات بايثون سنتعلم:
الشروط if و else في Python
وسنفهم كيف نجعل البرنامج يتخذ قرارات حسب شروط معينة.
