القوائم والقواميس واستخدامها عملياً

القوائم والقواميس واستخدامها عملياً

47 دقيقة
٩ يونيو ٢٠٢٦
المرحلة 1 من 6

مقدمة عن القوائم والقواميس

الدرس السادس: القوائم والقواميس واستخدامها عملياً (Lists and Dictionaries)

مرحباً بك في الدرس السادس من سلسلة تعلم بايثون وبناء API عملي. في الدروس السابقة، تعلمنا كيفية تخزين قيمة واحدة في متغير، مثل رقم أو نص. لكن ماذا لو أردنا تخزين قائمة بأسماء طلاب الفصل؟ أو تخزين معلومات شخص مثل اسمه وعمره وبريده الإلكتروني؟ هنا يأتي دور القوائم (Lists) والقواميس (Dictionaries)، وهما من أهم أدوات تخزين البيانات في بايثون.

لماذا نحتاج القوائم والقواميس؟

تخيل أنك تبني تطبيقاً لإدارة المهام (To-Do List). ستحتاج إلى تخزين عدة مهام، وكل مهمة لها عنوان ووصف وحالة (مكتملة أم لا). لا يمكنك إنشاء متغير منفصل لكل مهمة، لأن ذلك سيجعل الكود فوضوياً وغير قابل للتوسع. القوائم تسمح لك بتخزين مجموعة من العناصر في متغير واحد، والقواميس تسمح لك بتخزين بيانات مرتبطة بمفاتيح (مثل "العنوان" و"الوصف")، مما يجعل التعامل مع البيانات منظماً وسهل الفهم.

1. القوائم (Lists)

القائمة هي مجموعة مرتبة من العناصر، يمكن أن تكون من أي نوع (أرقام، نصوص، أو حتى قوائم أخرى). يتم تعريفها باستخدام الأقواس المربعة []، وتفصل العناصر بفاصلة.

إنشاء قائمة والوصول إلى عناصرها

# إنشاء قائمة بأسماء طلاب
students = ["أحمد", "سارة", "خالد", "نورة"]

# طباعة القائمة كاملة
print(students)  # Output: ['أحمد', 'سارة', 'خالد', 'نورة']

# الوصول إلى العنصر الأول (التفقيط يبدأ من 0)
print(students[0])  # Output: أحمد

# الوصول إلى العنصر الأخير باستخدام الرقم -1
print(students[-1])  # Output: نورة

# تغيير قيمة عنصر
students[1] = "مريم"
print(students)  # Output: ['أحمد', 'مريم', 'خالد', 'نورة']

العمليات الأساسية على القوائم

القوائم توفر دوالاً جاهزة لتعديلها:

  • append(item): إضافة عنصر إلى نهاية القائمة.
  • remove(item): إزالة أول عنصر يطابق القيمة المعطاة.
  • len(list): الحصول على عدد العناصر في القائمة.
  • for item in list:: التكرار على جميع العناصر.
# إضافة طالب جديد
students.append("علي")
print(students)  # Output: ['أحمد', 'مريم', 'خالد', 'نورة', 'علي']

# إزالة طالب
students.remove("خالد")
print(students)  # Output: ['أحمد', 'مريم', 'نورة', 'علي']

# معرفة عدد الطلاب
print(f"عدد الطلاب: {len(students)}")  # Output: عدد الطلاب: 4

# التكرار على القائمة وطباعة كل طالب
for student in students:
    print(f"مرحباً {student}")

2. القواميس (Dictionaries)

القاموس هو مجموعة غير مرتبة من أزواج (مفتاح: قيمة). المفتاح (Key) هو معرف فريد (عادةً نص)، والقيمة (Value) يمكن أن تكون أي شيء (نص، رقم، قائمة، أو حتى قاموس آخر). يتم تعريفه باستخدام الأقواس المعقوفة {}.

إنشاء قاموس والوصول إلى قيمه

# إنشاء قاموس يمثل مهمة واحدة
task = {
    "title": "شراء حليب",
    "description": "اذهب إلى السوبرماركت واشتر حليباً",
    "completed": False
}

# طباعة القاموس كاملاً
print(task)  # Output: {'title': 'شراء حليب', 'description': 'اذهب إلى السوبرماركت واشتر حليباً', 'completed': False}

# الوصول إلى قيمة باستخدام المفتاح
print(task["title"])  # Output: شراء حليب

# تغيير قيمة مفتاح
task["completed"] = True
print(task["completed"])  # Output: True

# إضافة مفتاح جديد
task["priority"] = "عالية"
print(task)  # Output: {'title': 'شراء حليب', 'description': 'اذهب إلى السوبرماركت واشتر حليباً', 'completed': True, 'priority': 'عالية'}

العمليات الأساسية على القواميس

  • dict.keys(): الحصول على جميع المفاتيح.
  • dict.values(): الحصول على جميع القيم.
  • dict.items(): الحصول على أزواج (مفتاح، قيمة) للتكرار عليها.
  • in: التحقق من وجود مفتاح في القاموس.
# طباعة جميع المفاتيح
print(task.keys())  # Output: dict_keys(['title', 'description', 'completed', 'priority'])

# طباعة جميع القيم
print(task.values())  # Output: dict_values(['شراء حليب', 'اذهب إلى السوبرماركت واشتر حليباً', True, 'عالية'])

# التكرار على المفاتيح والقيم معاً
for key, value in task.items():
    print(f"{key}: {value}")

# التحقق من وجود مفتاح
if "title" in task:
    print("المهمة لها عنوان")

3. الجمع بين القوائم والقواميس (قائمة من القواميس)

في التطبيقات العملية، ستستخدم غالباً قائمة تحتوي على عدة قواميس. هذا هو الهيكل الأساسي لمعظم APIs. على سبيل المثال، قائمة المهام ستكون قائمة، وكل مهمة فيها ستكون قاموساً.

# قائمة تحتوي على ثلاث مهام
tasks = [
    {"title": "شراء حليب", "completed": False},
    {"title": "قراءة كتاب", "completed": True},
    {"title": "مراجعة الكود", "completed": False}
]

# طباعة عناوين المهام غير المكتملة
for task in tasks:
    if not task["completed"]:
        print(f"يجب إكمال: {task['title']}")

# إضافة مهمة جديدة
new_task = {"title": "تعلم بايثون", "completed": False}
tasks.append(new_task)
print(f"عدد المهام الآن: {len(tasks)}")  # Output: عدد المهام الآن: 4
نصيحة مهمة: عند التعامل مع القواميس، تأكد دائماً من وجود المفتاح قبل الوصول إليه لتجنب أخطاء KeyError. يمكنك استخدام دالة get() الآمنة: task.get("priority", "غير محدد").

أخطاء شائعة وكيفية تجنبها

  • الخطأ: IndexError: يحدث عند محاولة الوصول إلى فهرس غير موجود في القائمة. الحل: تأكد من أن الفهرس أقل من طول القائمة باستخدام len().
  • الخطأ: KeyError: يحدث عند محاولة الوصول إلى مفتاح غير موجود في القاموس. الحل: استخدم get() أو تحقق باستخدام in.
  • الخطأ: تعديل القائمة أثناء التكرار عليها: قد يؤدي إلى نتائج غير متوقعة. الحل: أنشئ نسخة من القائمة للتكرار عليها إذا كنت تخطط لتعديلها.

تمرين عملي

قم بإنشاء برنامج صغير يقوم بالتالي:

  1. أنشئ قائمة فارغة باسم shopping_list.
  2. أضف ثلاثة عناصر إلى القائمة باستخدام append() (مثلاً: "تفاح"، "خبز"، "حليب").
  3. أنشئ قاموساً باسم item_details يحتوي على مفاتيح: name (اسم العنصر)، quantity (الكمية)، price (السعر).
  4. اطبع رسالة تقول: "سأشتري [الاسم]، الكمية: [الكمية]، السعر: [السعر]".
  5. استخدم حلقة for لطباعة جميع العناصر في shopping_list.
حاول كتابة الكود بنفسك أولاً، ثم قارنه بالحل أدناه:
# الحل
shopping_list = []
shopping_list.append("تفاح")
shopping_list.append("خبز")
shopping_list.append("حليب")

item_details = {
    "name": "تفاح",
    "quantity": 3,
    "price": 5.5
}

print(f"سأشتري {item_details['name']}، الكمية: {item_details['quantity']}، السعر: {item_details['price']}")

for item in shopping_list:
    print(f"- {item}")

بهذا نكون قد تعلمنا أساسيات القوائم والقواميس، وهما حجر الزاوية في بناء أي تطبيق عملي. في الدرس القادم، سنتعلم كيفية التعامل مع الملفات لتخزين هذه البيانات بشكل دائم. استمر في التدرب، فالإتقان يأتي مع الممارسة!

جاري تحميل التقييمات...