Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

بايثونالكلاس dict

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

مفهوم الكلاس dict

النوع dict يمثل جدول يتألف من عمودين، الأول يحتوي على المفاتيح ( Keys ) و الثاني يحتوي على القيم ( Values ) الخاصة بكل عنصر.

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

الكلمة dict إختصار لكلمة dictionary و التي تعني قاموس أو معجم.


طريقة تعريف dict

لتعريف dict نستخدم الرمز { } و بداخله يمكن تمرير العناصر بشكل مباشر له بشرط وضع فاصلة بين كل عنصرين.

كل عنصر يتم إضافته فيه يجب وضع نقطتين فوق بعض : بين مفتاحه و قيمته.


في المثال التالي قمنا بتعريف dict فارغ، أي لا يحتوي أي عنصر.

المثال الأول

Test.py
data = {}        # data فارغ إسمه dict هنا قمنا بتعريف
print(data)      # ( أي كما قمنا بتعريفه ) كما هو data هنا قمنا بعرض ما يحتويه الكائن

النتيجة

{}

سواء أردنا تعريف dict أو set فإننا نستخدم الرمز { } و لكننا لا نستطيع ملاحظة وجود أي فرق بين عرض محتوى dict فارغ أو set فارغ. الفرق نلاحظه بمجرد إضافة عنصر واحد بين الرمز { } فبمجرد إعطائه مفتاح و قيمة فإن مفسّر لغة بايثون سيفهم أننا نريد تعريف dict و ليس set.


في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
المفاتيح وضعناها كأرقام، و القيم وضعناها كنصوص مع الإشارة إلى أنه يمكنك وضع أي نوع تريد.
كما أننا قمنا تعريف كل عنصر ( أي كل مفتاح و قيمة ) على سطر منفرد لتكون قراءته أسهل فقط.

المثال الثاني

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# ( أي كما قمنا بتعريفه ) كما هو data هنا قمنا بعرض ما يحتويه الكائن
print(data)

النتيجة

{1: 'Admin', 2: 'Editor', 3: 'Reader'}

في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
المفاتيح وضعناها كنصوص، و القيم وضعناها كأرقام و نصوص.

المثال الثالث

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    'id': 1,
    'name': 'Mhamad',
    'mobile': 70123456
}

# ( أي كما قمنا بتعريفه ) كما هو data هنا قمنا بعرض ما يحتويه الكائن
print(data)

النتيجة

{'id': 1, 'name': 'Mhamad', 'mobile': 70123456}

الوصول لقيم عناصر كائن dict

للوصول لأي عنصر موجود في dict سواء للحصول على قيمته، تغييرها أو حذفها فإننا نستخدم المفتاح الخاص بالعنصر.


في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
بعدها قمنا باستخدام الرمز [] لعرض قيمة العنصر الذي يملك المفتاح رقم 1.

المثال الأول

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# 1 هنا قمنا بطباعة قيمة العنصر الذي يملك المفتاح رقم
print(data[1])

النتيجة

Admin

في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
بعدها قمنا باستخدام الدالة get() لعرض قيمة العنصر الذي يملك المفتاح رقم 1.

المثال الثاني

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# 1 هنا قمنا بطباعة قيمة العنصر الذي يملك المفتاح رقم
print(data.get(1))

النتيجة

Admin

في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
بعدها قمنا بعرض جميع المفاتيح الموضوعة فيه باستخدام الحلقة for.

المثال الثالث

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# و من ثم سيتم طباعته key في المتغير data في كل مرة سيتم وضع مفتاح عنصر من عناصر الكائن
for key in data:
    print(key)

النتيجة

1
2
3

في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
بعدها قمنا بعرض قيم جميع المفاتيح الموضوعة فيه باستخدام الحلقة for.

المثال الرابع

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# و من ثم سيتم طباعة قيمة هذا المفتاح key في المتغير data في كل مرة سيتم وضع مفتاح عنصر من عناصر الكائن
for key in data:
    print(data[key])

النتيجة

Admin
Editor
Reader

إضافة عناصر في كائن dict

لإضافة عنصر جديد في الـ dict فإننا نمرر مفتاح جديد و القيمة التي يساويها.

في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
بعدها أضفنا فيه عنصر جديد مفتاحه العدد 4 و قيمته النص 'Author'.

مثال

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# 'Author' مفتاحه الرقم 4 و قيمته النص data هنا قمنا بإضافة عنصر جديد في الكائن
data[4] = 'Author'

# data هنا قمنا بعرض ما أصبح يحتويه الكائن
print(data)

النتيجة

{1: 'Admin', 2: 'Editor', 3: 'Reader', 4: 'Author'}

تغيير قيم عناصر الكائن dict

لتغيير قيمة أي عنصر في الـ dict فإننا نمرر مفتاح العنصر الذي نريد تبديل قيمته و من بعدها نضع القيمة الجديدة.

في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
بعدها قمنا بتبديل قيمة العنصر الذي يملك مفتاح يساوي 3 إلى 'Subscriber'.

مثال

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# 'Subscriber' إلى القيمة data هنا قمنا بتغيير قيمة العنصر الذي يملك المفتاح رقم 3 في الكائن
data[3] = 'Subscriber'

# data هنا قمنا بعرض ما أصبح يحتويه الكائن
print(data)

النتيجة

{1: 'Admin', 2: 'Editor', 3: 'Subscriber'}

حذف عناصر من كائن dict

الجملة del تستخدم لحذف الـ dict كما هو من الذاكرة أو لحذف عناصر محددة منه.


في المثال التالي قمنا بتعريف dict وضعنا فيه ثلاث عناصر.
بعدها قمنا بحذف العنصر الذي يملك مفتاح يساوي 3 منه.

المثال الأول

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# data هنا قمنا بحذف العنصر الذي يملك المفتاح رقم 3 في الكائن
del data[3]

# data هنا قمنا بعرض ما أصبح يحتويه الكائن
print(data)

النتيجة

{1: 'Admin', 2: 'Editor'}

في المثال التالي قمنا بتعريف dict يتألف من ثلاث عناصر.
بعدها قمنا بحذفه من الذاكرة. بعدها حاولنا أن نعرض ما يحتويه.

المثال الثاني

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# كما هو من الذاكرة data هنا قمنا بحذف الكائن
del data

# و الذي في الأصل قمنا بحذفه من الذاكرة لذلك سيظهر خطأ عند التشغيل data هنا حاولنا عرض ما يحتويه الكائن
print(data)

النتيجة

NameError: name 'data' is not defined

معرفة ما إذا كان كائن dict يحتوي على مفتاح معين

العامل in يستخدم للبحث في الـ dict عن مفتاح معين أو للمرور على قيمه في حال إستخدامه في الحلقة for كما سبق و رأينا.

عند استخدام العامل in للبحث في الـ dict عن مفتاح ما فإنه يرجع True في حال تم إيجاد عنصر يملك هذا المفتاح.
و يرجع False في حال لم يجد عنصر يملك هذا المفتاح.

في المثال التالي إستخدمنا العامل in للبحث في الـ dict عن عنصر يملك مفتاح يساوي 2.

مثال

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# عن المفتاح رقم 2 و في حال data هنا سيتم البحث في الكائن
# True تم إيجاد عنصر يملك هذا المفتاح سيتم عرض القيمة 
print(2 in data)

النتيجة

True

معرفة عدد عناصر الـ dict

لمعرفة عدد عناصر كائن نوعه dict نستخدم الدالة len().

في المثال التالي قمنا بتعريف dict يتألف من ثلاث عناصر. بعدها قمنا بطباعة عدد عناصره بواسطة الدالة len().

مثال

Test.py
# data يتألف من ثلاث عناصر و إسمه dict هنا قمنا بتعريف
data = {
    1: 'Admin',
    2: 'Editor',
    3: 'Reader'
}

# len() الذي سترجعه الدالة data هنا قمنا بعرض عدد عناصر الكائن
print(len(data))

النتيجة

3

دوال الكلاس dict

إسم الدالة مع تعريفها
1 clear() تستخدم لحذف جميع عناصر الـdict الذي قام باستدعائها.
شاهد المثال
2 copy() ترجع نسخة من الـdict الذي قام باستدعائها.
شاهد المثال
3 popitem() ترجع آخر عنصر تم إضافته في كائن الـdict الذي قام باستدعائها و من ثم تحذفه منه.
في حال لم يتم العثور على القيمة المراد حذفها ترمي الإستثناء KeyError.
شاهد المثال
4 pop(key[, default]) تبحث في الكائن الـdict الذي قام باستدعائها عن عنصر يملك نفس المفتاح الذي نمرره لها مكان الباراميتر key و في حال وجدته فإنها ترجعه و من ثم تحذفه منه.
default هو باراميتر إختياري، مكانه يمكن تمرير قيمة إفتراضية ليتم إرجاعها في حال لم يتم العثور على عنصر يملك المفتاح الذي مررناه لها.
في حال لم يتم العثور على عنصر يملك المفتاح الذي تم وضعه مكان الباراميتر key و لم يتم وضع قيمة إفتراضية مكان الباراميتر default فإنها ترمي الإستثناء KeyError.
شاهد المثال
5 get(key[, default]) تبحث في كائن الـdict الذي قام باستدعائها عن قيمة المفتاح الذي نمرره لها مكان الباراميتر key و ترجعها.
default هو باراميتر إختياري، مكانه يمكن تمرير قيمة إفتراضية ليتم إرجاعها في حال لم يتم العثور على عنصر يملك المفتاح الذي مررناه لها.
في حال لم يتم العثور على عنصر يملك المفتاح الذي تم وضعه مكان الباراميتر key و لم يتم وضع قيمة إفتراضية مكان الباراميتر default فإنها ترجع None.
شاهد المثال
6 keys() ترجع مصفوفة نوعها dict_keys فيها جميع المفاتيح الموجودة في كائن الـdict الذي قام باستدعائها.
ملاحظة: مصفوفة المفاتيح التي ترجعها ليست نسخة عن المفاتيح الموجودة في كائن الـdict بل هي نفسها و بالتالي أي تعديل يتم إجراؤه عليها ينعكس على المفاتيح الموجودة في كائن الـdict نفسه و العكس كذلك.
شاهد المثال
7 values() ترجع مصفوفة نوعها dict_values فيها جميع القيم الموجودة في كائن الـdict الذي قام باستدعائها.
ملاحظة: مصفوفة القيم التي ترجعها ليست نسخة عن القيم الموجودة في كائن الـdict بل هي نفسها و بالتالي أي تعديل يتم إجراؤه عليها ينعكس على المفاتيح الموجودة في كائن الـdict نفسه و العكس كذلك.
شاهد المثال
8 items() ترجع مصفوفة نوعها dict_items فيها جميع العناصر الموجودة في كائن الـdict الذي قام باستدعائها.
ملاحظة: مصفوفة العناصر التي ترجعها ليست نسخة عن العناصر الموجودة في كائن الـdict بل هي نفسها و بالتالي أي تعديل يتم إجراؤه عليها ينعكس على العناصر الموجودة في الكائن الـdict نفسه و العكس كذلك.
شاهد المثال
9 fromkeys(seq[, value]) تستخدم لإنشاء dict جديد مبني على قيم مصفوفة نمررها لها.
مكان الباراميتر seq نمرر كائن يمثل مصفوفة من أي نوع كان سواء list أو set أو tuple، عناصر هذا الكائن يتم وضعها كمفاتيح في كائن الـ dict الذي سيتم إنشاؤه.
value هو باراميتر إختياري، مكانه يمكن تمرير قيمة واحدة ليتم وضعها كقيمة أولية لجميع عناصر كائن الـ dict الذي سيتم إنشاؤه.
شاهد المثال
10 setdefault(key[, default]) تستخدم للحصول على قيمة مفتاح موجود في كائن الـdict الذي قام باستدعائها أو لإضافة عنصر جديد فيه مع إرجاع قيمته أيضاً.
مكان الباراميتر key نمرر مفتاح العنصر الذي إن كان موجوداً في كائن الـdict سيتم إرجاع قيمته فقط و إن لم يكن موجوداً فسيتم إضافته و إرجاع قيمته.
default هو باراميتر إختياري، مكانه يمكن تمرير قيمة أولية ليتم وضعها في العنصر في حال تم إضافته لأنه إفتراضياً إن تم إضافة عنصر جديد فإنه قيمته تكون None.
شاهد المثال
11 update([other]) تستخدم لتحديث قيم عناصر الـdict الذي قام باستدعائها على أساس المفاتيح الموجودة فيه.
مكان الباراميتر other يمكننا أن نمرر كائن dict فيه عنصر واحد أو مجموعة العناصر التي نريد تحديث قيمها أو إضافتها في كائن الـdict الذي قام باستدعائها.
أي عنصر نمرره مكان الباراميتر other يملك مفتاح غير موجود في كائن الـdict الذي قام باستدعائها سيتم إضافته فيه.
شاهد المثال