عمليات القواميس

10.3 عمليات القواميس

أهداف التعلم

في نهاية هذا القسم، ينبغي أن تكون قادرًا على

  • إدراك أن كائن القاموس قابل للتغيير.
  • تقييم عناصر القاموس ومفاتيحها وقيمها.
  • الوصول إلى عناصر القاموس وتقييمها وتعديلها.
  • تعديل قاموس بإضافة عناصر إليه.
  • تعديل قاموس بحذف عناصر منه.

الوصول إلى عناصر القاموس

في بايثون، يمكن الوصول إلى القيم المرتبطة بالمفاتيح في القاموس باستخدام المفاتيح كفهارس. فيما يلي طريقتان للوصول إلى عناصر القاموس في بايثون:

  • ترميز الأقواس المربعة: تُستخدم الأقواس المربعة [] مع المفتاح بداخلها للوصول إلى القيمة المرتبطة بذلك المفتاح. إذا لم يُعثر على المفتاح، يُطلَق استثناء.
  • تابع get(): يُستدعى تابع get() مع المفتاح كوسيط للوصول إلى القيمة المرتبطة بذلك المفتاح. إذا لم يُعثر على المفتاح، يُرجع التابع None افتراضيًا، أو قيمة افتراضية محددة كوسيط ثانٍ.

مثال: في الشِفرة أدناه، يُهيَّأ كائن قاموس my_dict بالعناصر {"apple": 2, "banana": 3, "orange": 4}. تُستخدم ترميز الأقواس المربعة وتابع get() للوصول إلى القيم المرتبطة بالمفتاحين "banana" و "apple"، على التوالي. عند البحث في القاموس عن المفتاح "pineapple"، تُرجَع القيمة -1 إذ لا يوجد هذا المفتاح في القاموس.

    my_dict = {"apple": 2, "banana": 3, "orange": 4}
    print(my_dict["banana"]) # تطبع: 3
    print(my_dict.get("apple")) # تطبع: 2
    print(my_dict.get("pineapple", -1)) # تطبع: -1

نقطة تحقق

الوصول إلى عناصر القاموس

مفاهيم تطبيقية

عناصر القاموس

بالاستناد إلى القاموس members = {"Jaya": "Student", "John": "TA", "Ksenia": "Staff"}، أجب عن الأسئلة التالية.

1.
ما ناتج members["Jaya"]؟
  1. 0
  2. None
  3. "Student"
2.
ما ناتج members.get("jaya")؟
  1. 0
  2. None
  3. "Student"
3.
ما ناتج members.get("jaya", "does not exist")؟
  1. "Student"
  2. "does not exist"
  3. None

الحصول على مفاتيح وقيم القاموس

يمكن الحصول على مفاتيح القاموس وقيمه، أو كليهما معًا، باستخدام الدوال keys() و values() و items() على التوالي. تُرجع الدوال keys() و values() و items() أنواع البيانات dict_keys و dict_values و dict_items على التوالي، والتي يمكن تحويلها إلى كائن قائمة باستخدام مُنشئ القوائم list().

مثال 10.1

الحصول على مفاتيح وقيم القاموس

يُنشأ كائن قاموس بالعناصر {"a": 97, "b": 98, "c": 99}. تُستدعى الدوال keys() و values() و items() للحصول على المفاتيح والقيم والعناصر في القاموس، على التوالي. تُستخدم list() أيضًا لتحويل الإخراج إلى كائن قائمة.

    dictionary_object = {"a": 97, "b": 98, "c": 99}

    print(dictionary_object.keys())
    print(list(dictionary_object.keys()))
    print(dictionary_object.values())
    print(dictionary_object.items())

ناتج الشِفرة أعلاه:

    dict_keys(["a", "b", "c"])
    ["a", "b", "c"]
    dict_values([97, 98, 99])
    dict_items([("a", 97), ("b", 98), ("c", 99)])

مفاهيم تطبيقية

مفاتيح وقيم القاموس

بالاستناد إلى القاموس numbers = {"one": 1, "two": 2, "three": 3}، أجب عن الأسئلة التالية.

4.
ما نوع ناتج numbers.keys()؟
  1. dict_keys
  2. dict_values
  3. list
5.
ما ناتج print(numbers.values())؟
  1. [1, 2, 3]
  2. dict_keys([1, 2, 3])
  3. dict_values([1, 2, 3])
6.
ما ناتج print(list(numbers.keys()))؟
  1. ["three", "two", "one"]
  2. ["one", "two", "three"]
  3. dict_keys(["one", "two", "three"])

قابلية القاموس للتغيير

في بايثون، القاموس نوع بيانات قابل للتغيير، أي يمكن تعديل محتواه بعد إنشائه؛ إذ يمكن إضافة عناصره أو تحديثها أو حذفها في أي وقت.

لإضافة عنصر إلى قاموس، يمكن استخدام إما ترميز الأقواس المربعة أو دالّة update().

  • ترميز الأقواس المربعة: عند استخدام الأقواس المربعة لإنشاء مفتاح جديد وتعيين قيمة للمفتاح، يُضاف زوج المفتاح-القيمة الجديد إلى القاموس. my_dict = {"apple": 2, "banana": 3, "orange": 4} my_dict["pineapple"] = 1 print(my_dict) # تطبع: {"apple": 2, "banana": 3, "orange": 4, "pineapple": 1}
  • تابع update(): يمكن استدعاء تابع update() مع أزواج مفتاح-قيمة إضافية لتحديث محتوى القاموس. my_dict = {"apple": 2, "banana": 3, "orange": 4} my_dict.update({"pineapple": 1, "cherry": 0}) print(my_dict) # تطبع: {"apple": 2, "banana": 3, "orange": 4, "pineapple": 1, "cherry": 0}

لتعديل عنصر قاموس، يمكن استخدام النهجين المذكورين أعلاه على مفتاح قاموس موجود مع القيمة المحدثة. مثال:

  • ترميز الأقواس المربعة: my_dict = {"apple": 2, "banana": 3, "orange": 4} my_dict["apple"] = 1 print(my_dict) # تطبع: {"apple": 1, "banana": 3, "orange": 4}
  • تابع update(): my_dict = {"apple": 2, "banana": 3, "orange": 4} my_dict.update({"apple": 1}) print(my_dict) # تطبع: {"apple": 1, "banana": 3, "orange": 4}

يمكن حذف العناصر من قاموس باستخدام الكلمة المحجوزة del أو تابع pop().

  • الكلمة المحجوزة del: my_dict = {"apple": 2, "banana": 3, "orange": 4} del my_dict["orange"] print(my_dict) # تطبع: {"apple": 2, "banana": 3}
  • تابع pop(): my_dict = {"apple": 2, "banana": 3, "orange": 4} deleted_value = my_dict.pop("banana") print(deleted_value) # تطبع: 3 print(my_dict) # الإخراج: {"apple": 2, "orange": 4}

نقطة تحقق

تعديل عناصر القاموس

مفاهيم تطبيقية

تعديل قاموس

بالاستناد إلى القاموس food = {"Coconut soup": "$15", "Butter Chicken": "$18", "Kabob": "$20"}، أجب عن الأسئلة التالية.

7.
أي خيار يعدّل قيمة المفتاح "Coconut soup" لتصبح "$11" مع الإبقاء على العناصر الأخرى كما هي؟
  1. food = {""Coconut soup": "$15""}
  2. food["Coconut soup"] = 11
  3. food["Coconut soup"] = "$11"
8.
أي خيار يزيل العنصر "Butter Chicken": "$18" من قاموس food؟
  1. food.remove("Butter Chicken")
  2. del food["Butter Chicken"]
  3. del food.del("Butter Chicken")
9.
ما محتوى قاموس food بعد استدعاء food.update({"Kabob": "$22", "Sushi": "$16"})؟
  1. {"Coconut soup": "$15", "Butter Chicken": "$18", "Kabob": "$22", "Sushi": "$16"}
  2. {"Coconut soup": "$15", "Butter Chicken": "$18", "Kabob": "$20", "Sushi": "$16"}
  3. { "Sushi": "$16", "Coconut soup": "$15", "Butter Chicken": "$18", "Kabob": "$20"}

جرّب بنفسك

أنشئ قاموسًا للسيارات خطوة بخطوة

اتبع الخطوات أدناه لإنشاء قاموس للسيارات cars وتعديله خطوة بخطوة.

  1. أنشئ قاموسًا فارغًا.
  2. أضف زوج مفتاح-قيمة هو "Mustang": 10.
  3. أضف زوج مفتاح-قيمة آخر هو "Volt": 3.
  4. اطبع القاموس.
  5. عدّل القيمة المرتبطة بالمفتاح "Mustang" لتصبح مساوية لـ 2.
  6. احذف المفتاح "Volt" والقيمة المرتبطة به.
  7. اطبع محتوى القاموس.
    Prints {"Mustang": 2}

جرّب بنفسك

عدد الأحرف الفريدة

بالاستناد إلى سلسلة نصية، احسب عدد الأحرف الفريدة واطبعه باستخدام قاموس.

    Input:
    string_value = "This is a string"
    Prints 10