تقديم قواميس Python
يمكن للمتغيرات في Python تخزين أنواع البيانات المختلفة. في السابق، تعلمت أنه يمكنك تخزين سلاسل وأرقام:
name = 'Earth'
moons = 1
على الرغم من أن هذا الأسلوب يعمل مع كميات أصغر من البيانات، إلا أنه يمكن أن يصبح معقدا بشكل متزايد عندما تعمل مع البيانات ذات الصلة. تخيل أنك تريد تخزين معلومات حول أقمار الأرض وأقمار المشتري.
earth_name = 'Earth'
earth_moons = 1
jupiter_name = 'Jupiter'
jupiter_moons = 79
لاحظ كيف كررنا المتغيرات مع بادئات مختلفة. يمكن أن يصبح هذا التكرار غير قابل للتشغيل. نظرا لأنك ستجد نفسك تعمل بشكل متكرر مع مجموعات البيانات ذات الصلة، مثل متوسط هطول الأمطار لأشهر مختلفة في مدن مختلفة، فإن تخزين هذه المتغيرات كقيم فردية ليس خيارا قابلا للتطبيق. بدلا من ذلك، يمكنك استخدام قواميس Python.
تسمح لك قواميس Python بالعمل باستخدام مجموعات البيانات المرتبطة. القاموس هو مجموعة من أزواج المفاتيح/القيم. فكر في الأمر كمجموعة من المتغيرات داخل حاوية، حيث المفتاح هو اسم المتغير، والقيمة هي القيمة المخزنة داخله.
إنشاء قاموس
تستخدم Python الأقواس المعقوصة ({ }
) وعلامة النقطتين (:
) للدلالة على قاموس. يمكنك إما إنشاء قاموس فارغ وإضافة قيم لاحقاً، أو ملئ القاموس في وقت الإنشاء. يتم فصل كل مفتاح/قيمة بواسطة نقطتين، ويتم تضمين اسم كل مفتاح في علامات الاقتباس كقيمة سلسلة حرفية. لأن المفتاح هو قيمة سلسلة حرفية، يمكنك استخدام أي اسم مناسب لوصف القيمة.
دعونا نقوم بإنشاء قاموس لتخزين اسم كوكب الأرض، وعدد الأقمار التي تمتلكها الأرض:
planet = {
'name': 'Earth',
'moons': 1
}
لديك مفتاحان، 'name'
و 'moons'
. يتصرف كل مفتاح بنفس الطريقة التي يتصرف بها المتغير: لديه اسم فريد، ويقوم بتخزين قيمة. ومع ذلك، يتم تضمينهما داخل متغير واحد أكبر يسمى planet
.
كما هو الحال مع المتغيرات العادية، تحتاج إلى التأكد من أنك تستخدم أنواع البيانات الصحيحة. في moons
بقيمة 1
في المثال السابق، لم تقم بتضمين علامات الاقتباس حول الرقم، لأنك تريد استخدام عدد صحيح. إذا كنت قد استخدمت '1'
، فسترى Python هذا المتغير كسلسلة، مما سيؤثر على قدرتك على إجراء العمليات الحسابية.
على عكس المتغيرات العادية، لا تحتاج أسماء المفاتيح إلى اتباع قواعد التسمية القياسية في Python. يمكنك استخدام أسماء المفاتيح لتكون أكثر وصفية في التعليمات البرمجية الخاصة بك.
قراءة قيم القاموس
يمكنك قراءة القيم داخل قاموس. تضم عناصر القاموس أسلوب get
الذي يمكنك استخدامه للوصول إلى قيمة باستخدام المفتاح الخاص به. إذا كنت ترغب في طباعة name
، يمكنك استخدام التعليمات البرمجية التالية:
print(planet.get('name'))
Earth
كما قد تفترض، الوصول إلى القيم في قاموس هو عملية شائعة. لحسن الحظ، هناك اختصار لوحة مفاتيح. يمكنك أيضاً تمرير المفتاح إلى رمز قوس مربع ([ ]
). يستخدم هذا الأسلوب تعليمة برمجية أقل من get
، ويستخدم معظم المبرمجين بناء الجملة هذا بدلا من ذلك. يمكنك إعادة كتابة المثال السابق باستخدام التعليمات البرمجية التالية:
# planet['name'] is identical to using planet.get('name')
print(planet['name'])
Earth
على الرغم من أن سلوك get
والأقواس المربعة ([ ]
) هو نفسه عموماً لاسترداد العناصر، هناك اختلاف أساسي واحد. إذا كان مفتاح غير متوفر، فإن get
ترجع None
، و[ ]
تظهر KeyError
.
wibble = planet.get('wibble') # Returns None
wibble = planet['wibble'] # Throws KeyError
تعديل قيم القاموس
يمكنك أيضاً تعديل قيم داخل عنصر قاموس باستخدام الأسلوب update
. يقبل هذا الأسلوب قاموس كمعلمة، ويحدث أي قيم موجودة بالقيم الجديدة التي تقدمها. إذا كنت تريد تغيير name
للقاموس planet
، يمكنك استخدام التعليمات البرمجية التالية، على سبيل المثال:
planet.update({'name': 'Makemake'})
# No output: name is now set to Makemake.
كما هو الحال عند استخدام اختصار القوسين المربعين ([ ]
) لقراءة القيم، يمكنك استخدام الاختصار نفسه لتعديل القيم. الفرق الرئيسي في بناء الجملة هو استخدام =
(يسمى أحياناً عامل التعيين ) لتوفير قيمة جديدة. لإعادة كتابة المثال السابق لتغيير الاسم، يمكنك استخدام التعليمات البرمجية التالية:
planet['name'] = 'Makemake'
# No output: name is now set to Makemake.
الميزة الرئيسية لاستخدام update
هو القدرة على تعديل قيم متعددة في عملية واحدة. المثالان التاليان هما نفسهما من الناحية المنطقية، ولكن بناء الجملة مختلف. لك مطلق الحرية في استخدام أي بناء جملة تشعر أنه الأنسب. يختار معظم المطورين أقواسا مربعة لتحديث القيم الفردية.
المثال التالي يقوم بنفس التعديلات على متغير planet
لدينا، مع تحديث الاسم والأقمار. لاحظ أنه باستخدام update
، تقوم بإجراء اتصال واحد مع الدالة، بينما يتضمن استخدام الأقواس المربعة اتصالين.
استخدام التحديث:
planet.update({
'name': 'Jupiter',
'moons': 79
})
استخدام الأقواس المربعة:
planet['name'] = 'Jupiter'
planet['moons'] = 79
إضافة مفاتيح وإزالتها
لا يطلب منك إنشاء كافة المفاتيح عند تهيئة قاموس. في الواقع، لا تحتاج إلى إنشاء أي مفاتيح! كلما أردت إنشاء مفتاح جديد، يمكنك تعيينه تماماً كما تفعل مع واحد موجود بالفعل.
لنفترض أنك تريد تحديث planet
لتضمين الفترة المدارية بالأيام:
planet['orbital period'] = 4333
# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# orbital period: 4333
# }
هام
الأسماء الرئيسية، مثل كل شيء آخر في Python، حساسة لحالة الأحرف. ونتيجة لذلك، يتم النظر إلى 'name'
و 'Name'
على أنها مفتاحين منفصلين في قاموس Python.
لإزالة مفتاح، يمكنك استخدام pop
. يرجع pop
القيمة ويزيل المفتاح من القاموس. لإزالة orbital period
، يمكنك استخدام التعليمات البرمجية التالية:
planet.pop('orbital period')
# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# }
أنواع البيانات المعقدة
القواميس قادرة على تخزين أي نوع من القيمة، بما في ذلك القواميس الأخرى. يسمح لك هذا بنمذجة البيانات المعقدة حسب الحاجة. تخيل الحاجة لتخزين قطر planet
، والذي يمكن قياسه حول خط الاستواء أو القطبين. يمكنك إنشاء قاموس آخر داخل planet
لتخزين هذه المعلومات:
# Add address
planet['diameter (km)'] = {
'polar': 133709,
'equatorial': 142984
}
# planet dictionary now contains: {
# name: 'Jupiter'
# moons: 79
# diameter (km): {
# polar: 133709
# equatorial: 142984
# }
# }
لاسترداد القيم في قاموس متداخل، تقوم بربط الأقواس المربعة معاً، أو استدعاءات إلى get
.
print(f'{planet["name"]} polar diameter: {planet["diameter (km)"]["polar"]}')
Jupiter polar diameter: 133709