تعلم لغة Python الفصل 6 : القواميس (DICTIONARIES ) الجزء 1

sparrow
0

 



الفصل : 6

الجزء : 1

العنوان : القواميس (DICTIONARIES )





في هذا الفصل ستتعلم كيفية استخدام القواميس (dictionaries) في Python، والتي تسمح لك بربط قطع من المعلومات المرتبطة. ستتعلم كيفية الوصول إلى المعلومات بمجرد وضعها في القاموس وكيفية تعديل تلك المعلومات. لأن القواميس يمكن أن تخزن كمية هائلة من المعلومات، سأريك كيفية التنقل عبر البيانات في القاموس. بالإضافة إلى ذلك، ستتعلم كيفية تداخل القواميس داخل القوائم، والقوائم داخل القواميس، وحتى القواميس داخل القواميس الأخرى. فهم القواميس يسمح لك بنمذجة مجموعة متنوعة من الأشياء الواقعية بدقة أكبر. ستتمكن من إنشاء قاموس يمثل شخصًا ومن ثم تخزين أكبر قدر ممكن من المعلومات حول هذا الشخص. يمكنك تخزين اسمه، وعمره، وموقعه، ومهنته، وأي جانب آخر من جوانب الشخص يمكنك وصفه. ستتمكن من تخزين أي نوعين من المعلومات يمكن مطابقتهما، مثل قائمة الكلمات ومعانيها، قائمة أسماء الأشخاص وأرقامهم المفضلة، قائمة الجبال وارتفاعاتها، وهكذا.


قاموس بسيط


لنأخذ في الاعتبار لعبة تحتوي على كائنات فضائية (aliens) يمكن أن تكون بألوان مختلفة ولها قيم نقاط مختلفة. هذا القاموس البسيط يخزن معلومات عن كائن فضائي معين:



القاموس `alien_0` يخزن لون الكائن الفضائي وقيمة النقاط. السطران الأخيران يصلان ويعرضان تلك المعلومات، كما هو موضح هنا:


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


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


القاموس في Python هو مجموعة من أزواج المفتاح-القيمة. كل مفتاح متصل بقيمة، ويمكنك استخدام المفتاح للوصول إلى القيمة المرتبطة بهذا المفتاح. يمكن أن تكون قيمة المفتاح رقمًا، أو سلسلة نصية (string)، أو قائمة، أو حتى قاموس آخر. في الواقع، يمكنك استخدام أي كائن يمكنك إنشاؤه في Python كقيمة في القاموس.


في Python، يتم التفاف القاموس بالأقواس المعقوفة ({}) مع سلسلة من أزواج المفتاح-القيمة داخل الأقواس، كما هو موضح في المثال السابق:



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


أبسط قاموس يحتوي على زوج مفتاح-قيمة واحد فقط، كما هو موضح في هذا الإصدار المعدل من قاموس `alien_0`:


هذا القاموس يخزن معلومة واحدة حول `alien_0`: لون الكائن الفضائي. السلسلة النصية `'color'` هي مفتاح في هذا القاموس، والقيمة المرتبطة بها هي `'green'`.


الوصول إلى القيم في القاموس


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



هذا يعيد القيمة المرتبطة بالمفتاح `'color'` من القاموس `alien_0`:


يمكنك أن تحتوي القواميس على عدد غير محدود من أزواج المفتاح-القيمة. على سبيل المثال، إليك القاموس الأصلي `alien_0` مع زوجي مفتاح-قيمة:



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


بمجرد تعريف القاموس، نسحب القيمة المرتبطة بالمفتاح `'points'` من القاموس. ثم يتم تعيين هذه القيمة للمتغير `new_points`. السطر الأخير يطبع بيانًا حول عدد النقاط التي حصل عليها اللاعب للتو:


إذا قمت بتشغيل هذا الكود في كل مرة يتم فيها إسقاط كائن فضائي، سيتم استرجاع قيمة النقاط الخاصة بالكائن الفضائي.


إضافة أزواج مفتاح-قيمة جديدة (Adding New Key-Value Pairs)


القواميس هي هياكل ديناميكية، ويمكنك إضافة أزواج مفتاح-قيمة جديدة إلى القاموس في أي وقت. لإضافة زوج مفتاح-قيمة جديد، يمكنك إعطاء اسم القاموس متبوعًا بالمفتاح الجديد في أقواس مربعة، مع القيمة الجديدة.


لنضف قطعتين جديدتين من المعلومات إلى القاموس `alien_0`: إحداثيات الكائن الفضائي (x و y)، والتي ستساعدنا في عرض الكائن الفضائي في موقع معين على الشاشة. لنضع الكائن الفضائي على الحافة اليسرى من الشاشة، 25 بكسل أسفل من الأعلى. لأن إحداثيات الشاشة تبدأ عادةً من الزاوية العلوية اليسرى للشاشة، سنضع الكائن الفضائي على الحافة اليسرى من الشاشة عن طريق تعيين الإحداثي x إلى 0 و 25 بكسل من الأعلى عن طريق تعيين الإحداثي y إلى 25، كما هو موضح هنا:


نبدأ بتعريف نفس القاموس الذي كنا نعمل معه. ثم نطبع هذا القاموس، مما يعرض لقطة لمعلوماته. بعد ذلك، نضيف زوج مفتاح-قيمة جديد إلى القاموس: المفتاح `'x_position'` والقيمة 0. نقوم بنفس الشيء للمفتاح `'y_position'`. عندما نطبع القاموس المعدل، نرى زوجي المفتاح-القيمة الإضافيين:


النسخة النهائية من القاموس تحتوي على أربعة أزواج مفتاح-قيمة. الاثنين الأصليين يحددان اللون وقيمة النقاط، واثنان آخران يحددان موضع الكائن الفضائي.


بدءًا من قاموس فارغ


في بعض الأحيان يكون من المناسب، أو حتى الضروري، أن تبدأ بقاموس فارغ ثم تضيف كل عنصر جديد إليه. لبدء ملء قاموس فارغ، عرّف قاموسًا بمجموعة فارغة من الأقواس ثم أضف كل زوج مفتاح-قيمة في سطره الخاص. على سبيل المثال، إليك كيفية بناء القاموس `alien_0` باستخدام هذه الطريقة:


ن بدأ بتعريف قاموس فارغ `alien_0`، ثم نضيف قيم اللون والنقاط إليه. النتيجة هي القاموس الذي كنا نستخدمه في الأمثلة السابقة:


عادةً ما ستستخدم القواميس الفارغة عند تخزين بيانات مقدمة من المستخدم في قاموس أو عند كتابة كود يولد عددًا كبيرًا من أزواج المفتاح-قيمة تلقائيًا.


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


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



نبدأ بتعريف قاموس لـ `alien_0` يحتوي فقط على لون الكائن الفضائي؛ ثم نغير القيمة المرتبطة بالمفتاح `'color'` إلى `'yellow'`. الناتج يظهر أن الكائن الفضائي قد تحول من اللون الأخضر إلى الأصفر:


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



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


تحدد سلسلة if-elif-else مدى بعد الكائن الفضائي إلى اليمين، وتعين هذه القيمة إلى المتغير `x_increment`. إذا كانت سرعة الكائن الفضائي 'slow'، فإنه يتحرك وحدة واحدة إلى اليمين؛ إذا كانت السرعة 'medium'، فإنه يتحرك وحدتين إلى اليمين؛ وإذا كانت 'fast'، فإنه يتحرك ثلاث وحدات إلى اليمين. بمجرد حساب الزيادة، تتم إضافتها إلى قيمة موضع x ويتم تخزين النتيجة في `x_position` بالقاموس.


نظرًا لأن هذا كائن فضائي ذو سرعة متوسطة، فإن موضعه يتحول وحدتين إلى اليمين:



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


ثم تقوم سلسلة if-elif-else بتعيين قيمة أكبر إلى `x_increment` في المرة التالية التي يتم فيها تشغيل الكود.


إزالة أزواج المفتاح-القيمة


عندما لم تعد بحاجة إلى معلومة مخزنة في قاموس، يمكنك استخدام العبارة `del` لإزالة زوج المفتاح-القيمة تمامًا. كل ما تحتاجه العبارة `del` هو اسم القاموس والمفتاح الذي تريد إزالته.


على سبيل المثال، لنقم بإزالة المفتاح 'points' من قاموس `alien_0`، مع قيمته:


تخبر العبارة `del` Python بحذف المفتاح 'points' من القاموس `alien_0` وإزالة القيمة المرتبطة بذلك المفتاح أيضًا. يظهر الناتج أن المفتاح 'points' وقيمته 5 قد تم حذفهما من القاموس، بينما بقية القاموس غير متأثرة:


لاحظ أن زوج المفتاح-القيمة المحذوف يتم إزالته بشكل دائم.


قاموس للكائنات المتشابهة


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


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


بمجرد الانتهاء من تعريف القاموس، أضف قوس الإغلاق على سطر جديد بعد آخر زوج مفتاح-قيمة، وزيّنه بمستوى واحد بحيث يتماشى مع المفاتيح في القاموس. من الجيد أن تتضمن فاصلة بعد آخر زوج مفتاح-قيمة أيضًا، حتى تكون جاهزًا لإضافة زوج مفتاح-قيمة جديد في السطر التالي.


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


لاستخدام هذا القاموس، بالنظر إلى اسم الشخص الذي شارك في الاستطلاع، يمكنك بسهولة معرفة لغته المفضلة:


لرؤية اللغة التي اختارتها سارة، نطلب القيمة عند:


نستخدم هذا الصيغة لاستخراج اللغة المفضلة لسارة من القاموس ونعيّنها إلى المتغير `language`. إنشاء متغير جديد هنا يجعل استدعاء `print()` أكثر نظافة. الناتج يظهر اللغة المفضلة لسارة:



يمكنك استخدام هذه الصيغة نفسها مع أي فرد ممثل في القاموس.


استخدام `get()` للوصول إلى القيم


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


دعنا نرى ماذا يحدث عندما تطلب قيمة النقاط لكائن فضائي ليس لديه قيمة نقاط محددة:



هذا يؤدي إلى تتبع الخطأ، يظهر `KeyError`:


ستتعلم المزيد عن كيفية التعامل مع الأخطاء مثل هذا بشكل عام في الفصل العاشر. بالنسبة للقواميس بشكل خاص، يمكنك استخدام الطريقة `get()` لتعيين قيمة افتراضية يتم إرجاعها إذا لم يكن المفتاح المطلوب موجودًا.


تتطلب الطريقة `get()` مفتاحًا كحجة أولى. كحجة ثانية اختيارية، يمكنك تمرير القيمة التي يتم إرجاعها إذا لم يكن المفتاح موجودًا:



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


إذا كان هناك احتمال أن المفتاح الذي تطلبه قد لا يكون موجودًا، فكر في استخدام الطريقة `get()` بدلاً من صيغة الأقواس المربعة.


لاحظ: إذا قمت بترك الحجة الثانية في الاستدعاء للطريقة `get()` والمفتاح غير موجود، سترجع Python القيمة `None`. القيمة الخاصة `None` تعني "لا توجد قيمة". هذا ليس خطأ: إنها قيمة خاصة تعني غياب القيمة. ستشاهد المزيد من الاستخدامات لـ `None` في الفصل الثامن.


جرب بنفسك :


تمرين 6-1. Person

استخدام قاموس لتخزين معلومات حول شخص تعرفه. قم بتخزين الاسم الأول، الاسم الأخير، العمر، والمدينة التي يعيش فيها. يجب أن تحتوي القاموس على المفاتيح التالية: `first_name`، `last_name`، `age`، و `city`. اطبع كل جزء من المعلومات المخزنة في القاموس.


تمرين 6-2. Favorite Numbers

استخدام قاموس لتخزين الأرقام المفضلة للأشخاص. فكر في خمسة أسماء واستخدمها كمفاتيح في قاموسك. فكر في رقم مفضل لكل شخص، وخزن كل منها كقيمة في قاموسك. اطبع اسم كل شخص ورقمه المفضل. لمزيد من المتعة، قم باستطلاع رأي بعض الأصدقاء واحصل على بعض البيانات الفعلية لبرنامجك.



تمرين 6-3. Glossary

يمكن استخدام قاموس في Python لتشكيل قاموس حقيقي. ولكن، لتجنب الارتباك، دعنا نسميه مصطلحات (glossary). فكر في خمسة كلمات برمجية تعلمتها في الفصول السابقة. استخدم هذه الكلمات كمفاتيح في المصطلحات، وخزن معانيها كقيم. اطبع كل كلمة ومعناها بتنسيق مرتب. يمكنك طباعة الكلمة متبوعة بنقطتين ثم معناها، أو طباعة الكلمة في سطر ومعناها بشكل مائل في السطر التالي. استخدم الحرف الخاص `\n` لإدراج سطر فارغ بين كل زوج من الكلمة والمعنى في الإخراج.



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


 


النهاية


نكون هنا انتهينا من الجزء 1 من الفصل 6 من منهج تعلم Python من كتاب python crash course بالعربية 


واذا واجهتك اي مشكلة في الفهم او ما شابه , يمكنك على الفور الذهاب الى المجتمع الخاص بنا في Telegram للمناقشة والتواصل معنا من هنا  


او اذا واجهتك مشكلة في الموقع او تريد اجابة سريعة يمكنك الذهاب الى اخر صفحة في الموقع ستجد صفحة اتصل بنا موجودة يمكنك ارسالة لنا مشكلتك , وسيتم الرد عليها بسرعة جدا ان شاء الله 


ويمكنك الأنضمام الى المجتمع Hidden Lock بالكامل مع جميع قنواته للأستفادة في اخر الأخبار في عالم التقنية وايضا الكتب بالمجان والكورسات والمقالات من خلال الرابط التالي لمجموعة القنوات من     هنا 


يمكنك ايضا متابعتنا في منصات X او Twitter سابقا , لمشاهدة الاخبار والمقالات السريعة والمهمة من  

هنا


وفقط كان معكم sparrow مقدم هذه الشهادة من فريق Hidden Lock 

Tags

إرسال تعليق

0تعليقات

إرسال تعليق (0)

#buttons=(موافق!) #days=(20)

يستخدم موقعنا ملفات تعريف الارتباط لتحسين تجربتك. تاكد الان
Ok, Go it!