مقدمة
القاموس هو نوع البيانات المدمج في Python. يقوم القواميس بتعيين المفاتيح إلى القيم وتوفير طريقة مفيدة لتخزين البيانات في Python.
يُستخدم عادة للحفاظ على البيانات ذات الصلة، مثل المعلومات الواردة في معرف أو ملف تعريف المستخدم، يتم بناء القواميس باستخدام الأقواس المجعدة من كلا الجانبين {
}
.
معلومات: لمتابعة أمثلة الشفرة في هذا البرنامج التعليمي، افتح طرفية Python التفاعلية على نظامك المحلي عن طريق تشغيل الأمر python3
. ثم يمكنك نسخ أو لصق أو تحرير الأمثلة عن طريق إضافتها بعد الرمز التفاعلي >>>
.
A dictionary looks like this:
بالإضافة إلى الأقواس المجعدة، هناك أيضًا نقاط التعليم (:
) في جميع أنحاء القاموس.
الكلمات على يسار نقاط التعليم هي المفاتيح. المفاتيح يمكن أن تتكون من أي نوع بيانات لا يتغير. المفاتيح في القاموس أعلاه هي:
'اسم_المستخدم'
'متصل'
'المتابعون'
كل مفتاح في المثال أعلاه هو قيمة نصية.
الكلمات على يمين نقاط التعليم هي القيم. يمكن أن تتألف القيم من أي نوع بيانات. القيم في القاموس أعلاه هي:
'sammy-shark'
صحيح
987
كل من هذه القيم إما سلسلة نصية، قيمة منطقية، أو عدد صحيح.
لنقم بطباعة القاموس sammy
:
Output{'username': 'sammy-shark', 'followers': 987, 'online': True}
من خلال النظر إلى الإخراج، قد يكون ترتيب أزواج المفتاح-القيم قد تغير. في إصدارات Python قبل 3.5، نوع بيانات القاموس لا يأتي مرتبًا. ومع ذلك، في إصدارات Python 3.6 وما بعدها، يظل نوع بيانات القاموس مرتبًا. بغض النظر عما إذا كان القاموس مرتبًا أم لا، ستظل أزواج المفتاح-القيم سليمة، مما يتيح لنا الوصول إلى البيانات استنادًا إلى معناها العلاقي.
المتطلبات المسبقة
يجب أن يكون لديك Python 3 مثبتًا وبيئة برمجة معينة على جهاز الكمبيوتر الخاص بك أو الخادم. إذا لم يكن لديك بيئة برمجة معينة، يمكنك الرجوع إلى دليل التثبيت والإعداد لـ بيئة برمجة محلية أو لـ بيئة برمجة على الخادم الخاص بك المناسبة لنظام التشغيل الخاص بك (Ubuntu، CentOS، Debian، إلخ).
الوصول إلى عناصر القاموس
يمكننا استدعاء قيم القاموس عن طريق الإشارة إلى المفاتيح المتعلقة بها.
الوصول إلى عناصر البيانات باستخدام المفاتيح
نظرًا لأن القواميس يقدمون أزواجًا مفتاحية القيمة لتخزين البيانات، يمكن أن تكون عناصر مهمة في برنامج Python الخاص بك.
إذا أردنا عزل اسم المستخدم لـ Sammy، يمكننا القيام بذلك عن طريق استدعاء sammy['username']
. دعنا نطبع ذلك:
Outputsammy-shark
القواميس يتصرفون مثل قاعدة بيانات في أنه بدلاً من استدعاء عدد صحيح للحصول على قيمة فهرس معين كما هو الحال مع القائمة، يمكنك تعيين قيمة لمفتاح ويمكنك استدعاء هذا المفتاح للحصول على قيمته المتعلقة.
من خلال استدعاء المفتاح 'username'
نتلقى قيمة هذا المفتاح، والتي هي 'sammy-shark'
.
يمكن استدعاء القيم المتبقية في القاموس sammy
بنفس الشكل:
من خلال استخدام أزواج مفتاحية القواميس، يمكننا الإشارة إلى المفاتيح لاسترجاع القيم.
استخدام الأساليب للوصول إلى العناصر
بالإضافة إلى استخدام المفاتيح للوصول إلى القيم، يمكننا أيضًا العمل مع بعض الأساليب المدمجة:
dict.keys()
تعزل المفاتيحdict.values()
تعزل القيمdict.items()
تعيد العناصر في تنسيق قائمة من أزواج الصفوف(key, value)
للحصول على المفاتيح، سنستخدم الأسلوب dict.keys()
. في مثالنا، سيتم استخدام اسم المتغير ويكون sammy.keys()
. دعونا نمرر ذلك إلى أسلوب print()
وننظر إلى الناتج:
Outputdict_keys(['followers', 'username', 'online'])
نتلقى ناتج يضع المفاتيح ضمن كائن عرض يمكن التكرار من فئة dict_keys
. ثم يتم طباعة المفاتيح ضمن تنسيق قائمة.
يمكن استخدام هذا الأسلوب للاستعلام عبر القواميس. على سبيل المثال، يمكننا إلقاء نظرة على المفاتيح المشتركة بين هيكلي بيانات القاموسين:
القاموس sammy
والقاموس jesse
هما كل من قاموس ملف تعريف المستخدم.
لديهما مفاتيح مختلفة في ملفات تعريفهما، ومن الجدير بالذكر أن لدى سامي ملف تعريف اجتماعي بمتابعين مرتبطين، ولديسي ملف تعريف للألعاب مع نقاط مرتبطة. المفاتيح الاثنتان المشتركتان بينهما هما اسم المستخدم
وحالة متصل
، والتي يمكننا العثور عليها عند تشغيل هذا البرنامج الصغير:
Outputsammy-shark JOctopus
True False
يمكننا بالتأكيد تحسين البرنامج لجعل الناتج أكثر قابلية للقراءة من قبل المستخدم، ولكن هذا يوضح أن dict.keys()
يمكن استخدامه للتحقق عبر مختلف القواميس لمعرفة ما يتشابه بينها أو ما لا يتشابه. هذا مفيد بشكل خاص للقواميس الكبيرة.
بالمثل، يمكننا استخدام طريقة dict.values()
للاستعلام عن القيم في القاموس sammy
، والتي ستكون مكونة كما يلي sammy.values()
. دعونا نطبع هذه:
Outputdict_values([True, 'sammy-shark', 987])
كلتا الطريقتين keys()
و values()
تعيدان قوائم غير مرتبة للمفاتيح والقيم الموجودة في قاموس sammy
باستخدام كائنات العرض dict_keys
و dict_values
على التوالي.
إذا كنا مهتمين بجميع العناصر في قاموس، يمكننا الوصول إليها باستخدام طريقة items()
:
Outputdict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])
التنسيق المُرجَعي لهذا هو قائمة مكونة من أزواج tuples (key، value)
مع كائن العرض dict_items
.
يمكننا تكرار التنسيق المُرجَعي باستخدام حلقة for
. على سبيل المثال، يمكننا طباعة كل من المفاتيح والقيم في قاموس معين، ثم جعله أكثر قابلية للفهم عن طريق إضافة سلسلة نصية:
Outputonline is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark
تكرر الحلقة for
أعلاه العناصر داخل قاموس sammy
وطبعت المفاتيح والقيم سطراً بعد سطر، مع معلومات تجعلها أسهل فهماً للبشر.
يمكننا استخدام الطرق المدمجة للوصول إلى العناصر، القيم، والمفاتيح من هياكل البيانات القاموسية.
تعديل القواميس
القواميس هي هيكل بيانات قابل للتعديل، لذا يمكنك تعديلها. في هذا القسم، سنتناول إضافة وحذف عناصر القاموس.
إضافة وتغيير عناصر القاموس
يمكنك إضافة أزواج المفتاح والقيمة إلى القواميس بدون استخدام طريقة أو وظيفة، عن طريق استخدام الصيغة التالية:
سنلقي نظرة على كيفية عمل هذا في التطبيق العملي من خلال إضافة زوج المفتاح والقيمة إلى قاموس يُسمى usernames
:
Output{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
نرى الآن أن القاموس تم تحديثه بزوج المفتاح والقيمة 'Drew': 'squidly'
. نظرًا لأن القواميس قد تكون غير مرتبة، قد يحدث هذا الزوج في أي مكان في مخرجات القاموس. إذا استخدمنا القاموس usernames
لاحقًا في ملف البرنامج الخاص بنا، فسيتضمن الزوج المفتاح والقيمة الإضافي.
بالإضافة إلى ذلك، يمكن استخدام هذه الصيغة لتعديل القيمة المعينة لمفتاح. في هذه الحالة، سنشير إلى مفتاح موجود ونمرر قيمة مختلفة إليه.
لنفترض أن هناك قاموس drew
وهو أحد المستخدمين على الشبكة المعطاة. سنقول إن هذا المستخدم حصل على زيادة في عدد المتابعين اليوم، لذا نحتاج إلى تحديث القيمة الصحيحة الممررة إلى مفتاح 'followers'
. سنستخدم وظيفة print()
للتحقق من أن القاموس تم تعديله.
Output{'username': 'squidly', 'followers': 342, 'online': True}
في الناتج، نرى أن عدد المتابعين قفز من القيمة الصحيحة 305
إلى 342
.
يمكننا استخدام هذه الطريقة لإضافة أزواج مفتاح-قيمة إلى القواميس مع إدخال المستخدم. لنكتب برنامجًا سريعًا، usernames.py
الذي يعمل في سطر الأوامر ويسمح بإدخال من المستخدم لإضافة المزيد من الأسماء وأسماء المستخدمين المرتبطة:
لنقم بتشغيل البرنامج في سطر الأوامر:
عند تشغيل البرنامج، سنحصل على شيء مشابه للإخراج التالي:
OutputEnter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:
عندما ننتهي من اختبار البرنامج، يمكننا الضغط على CTRL + C
للخروج من البرنامج. يمكنك تهيئة مشغل لإنهاء البرنامج (مثل كتابة الحرف q
) باستخدام بيان شرطي لتحسين الشفرة.
يوضح ذلك كيف يمكنك تعديل القواميس تفاعليًا. مع هذا البرنامج بشكل خاص، فور خروجك من البرنامج باستخدام CTRL + C
، ستفقد كل بياناتك ما لم تنفذ طريقة لـ معالجة قراءة وكتابة الملفات.
يمكننا أيضًا إضافة وتعديل القواميس باستخدام طريقة dict.update()
. هذا يختلف عن الطريقة append()
المتاحة في القوائم.
في القاموس jesse
أدناه، دعونا نضيف المفتاح 'followers'
ونعطيه قيمة صحيحة بـ jesse.update()
. بعد ذلك، دعونا print()
القاموس المُحدّث.
Output{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}
من الإخراج، يمكننا أن نرى أننا أضفنا بنجاح زوج المفتاح-القيمة 'followers': 481
إلى القاموس jesse
.
يمكننا أيضًا استخدام طريقة dict.update()
لتعديل زوج المفتاح-القيمة الحالي عن طريق استبدال قيمة معينة لمفتاح محدد.
لنقم بتغيير حالة الاتصال عبر الإنترنت لـ Sammy من True
إلى False
في القاموس sammy
:
Output{'username': 'sammy-shark', 'followers': 987, 'online': False}
السطر sammy.update({'online': False})
يشير إلى المفتاح الموجود 'online'
ويعدل قيمته البولية من True
إلى False
. عندما نقوم بالاستدعاء إلى print()
القاموس، نرى أن التحديث يحدث في الناتج.
لإضافة عناصر إلى القواميس أو تعديل القيم، يمكننا استخدام إما بنية dict[key] = value
أو الطريقة dict.update()
.
حذف عناصر القاموس
كما يمكنك إضافة أزواج المفتاح-القيمة وتغيير القيم داخل نوع البيانات القاموسي، يمكنك أيضًا حذف العناصر داخل القاموس.
لإزالة زوج مفتاح-قيمة من القاموس، سنستخدم البنية النحوية التالية:
لنأخذ القاموس jesse
الذي يمثل أحد المستخدمين. سنقول أن جيسي لم يعد يستخدم المنصة عبر الإنترنت للعب الألعاب، لذا سنقوم بإزالة العنصر المرتبط بمفتاح 'points'
. ثم، سنقوم بطباعة القاموس للتأكد من حذف العنصر:
Output{'online': False, 'username': 'JOctopus', 'followers': 481}
السطر del jesse['points']
يزيل زوج المفتاح-القيمة 'points': 723
من القاموس jesse
.
إذا كنا نرغب في مسح القاموس من جميع قيمه، يمكننا القيام بذلك باستخدام الطريقة dict.clear()
. سيحتفظ هذا بالقاموس المعطى في حالة احتياجنا إليه لاحقًا في البرنامج، ولكنه لن يحتوي على أي عناصر بعد الآن.
لنقم بإزالة جميع العناصر داخل القاموس jesse
:
Output{}
الناتج يظهر أن لدينا الآن قاموس فارغ خالي من أزواج المفتاح والقيم.
إذا لم نعد بحاجة إلى قاموس معين، يمكننا استخدام del
للتخلص منه تمامًا:
عند تشغيل استدعاء لـ print()
بعد حذف قاموس jesse
، سنتلقى الخطأ التالي:
Output...
NameError: name 'jesse' is not defined
بسبب أن القواميس هي أنواع بيانات قابلة للتغيير، يمكن إضافة عناصر إليها وتعديلها، ويمكن إزالة العناصر ومسحها.
الاستنتاج
قام هذا البرنامج التعليمي عبر هيكل البيانات القاموس في لغة Python. القواميس مكونة من أزواج المفتاح والقيم وتوفر وسيلة لتخزين البيانات دون الاعتماد على الترقيم. يتيح ذلك لنا استرداد القيم استنادًا إلى معناها وعلاقتها بأنواع البيانات الأخرى.
يمكنك الآن معرفة المزيد عن أنواع البيانات الأخرى في برنامجنا التعليمي “فهم أنواع البيانات“.
يمكنك رؤية نوع البيانات القاموس المستخدم في مشاريع البرمجة مثل جمع البيانات من الويب باستخدام Scrapy.
Source:
https://www.digitalocean.com/community/tutorials/understanding-dictionaries-in-python-3