أساسيات بايثون 10: شرح Dictionaries في Python للمبتدئين

أساسيات بايثون الدرس 10: شرح Dictionaries في Python وتخزين البيانات على شكل key و value

مرحبًا بك في الدرس العاشر من سلسلة أساسيات بايثون على موقع عرب بايثون.

في الدروس السابقة تعلمنا أنواعًا مهمة من البيانات مثل القوائم Lists والمجموعات Sets. واليوم سنتعلم نوعًا مهمًا جدًا في بايثون اسمه:

{getToc} $title={محتوى المقال}

Dictionary أو بالعربي: القاموس.

القاموس في بايثون يستخدم لتخزين البيانات على شكل مفتاح وقيمة، وهذا يجعله مناسبًا جدًا لتخزين بيانات منظمة مثل بيانات طالب، منتج، مستخدم، إعدادات برنامج، أو نتيجة قادمة من API.

بطاقة طالب توضح فكرة Dictionary في Python باستخدام مفاتيح name و age و city وقيمها

إذا لم تقرأ الدروس السابقة، أنصحك تبدأ من: شرح 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
مقارنة بين الوصول إلى قيمة في Dictionary باستخدام student["name"] واستخدام student.get("name") في Python

وهذا يجعل 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() تعرض كل مفتاح مع قيمته.

ملخص يوضح دوال keys و values و items في Dictionary لعرض المفاتيح والقيم معًا في Python
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 في Python يحتوي على قاموس students وبداخله student1 و student2

هذا النوع يسمى أحيانًا 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.

مقالات مقترحة من عرب بايثون

خلاصة الدرس

في هذا الدرس تعلمنا أن 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

وسنفهم كيف نجعل البرنامج يتخذ قرارات حسب شروط معينة.

إرسال تعليق

أحدث أقدم