A Byte of Python

Dictionary

القاموس القاموس هو بمثابة كتاب عنونة حيث يمكنك أن تجد عنوان أو تفاصيل للاتصال مع شخص عن طريق معرفه اسمه /اسمها. مثلا؛ نحن نتشارك المفاتيح (الاسم) مع القيم (التفاصيل). علما بأن المفتاح يجب أن يكون فريدا unique حيث أنه لا يمكنك الحصول على معلومات صحيحة إذا كان لديك شخصان بنفس الاسم بالضبط .

علما انه يمكنك استخدام ojects ثابتة فقط (مثل السلاسل النصية) لمفاتيح القاموس ولكن يمكنك استخدام ojects ثابتة أو قابلة للتغيير لقيم القاموس يمكننا أن نترجم ذلك بقولنا أنه ينبغي ان لا تستخدم سوى اشياء بسيطة للمفاتيح.

زوج من المفاتيح والقيم المذكوره في القاموس باستخدام العبارة d = {key1 : value1, key2 : value2 } لاحظ أن أزواج المفتاح/القيمة منفصلين عن طريق النقطتين والأزواج أنفسهم منفصلان عن طريق فاصلة , و كل هذا داخل في زوج من الاقواس المجعدة .

تذكر ان أزواج key/valueفي القاموس ليست لها أي طريقة ترتيب. اذا اردت ترتيبا معينا، سيتعين عليك ترتيبها بنفسك قبل استعمالها.

القواميس ال ستقوم باستخدامها تعتبر أمثلة/كائنات instances/objects من الطبقة dict

استخدام القواميس

مثال 9.4. استخدام القواميس

#!/usr/bin/python
# Filename: using_dict.py
# 'ab' is short for 'a'ddress'b'ook
ab = {		'Swaroop'   : '[email protected]',
		'Larry'     : '[email protected]',
		'Matsumoto' : '[email protected]',
		'Spammer'   : '[email protected]'
	}
print "Swaroop's address is %s" % ab['Swaroop']
# Adding a key/value pair
ab['Guido'] = '[email protected]'
# Deleting a key/value pair
del ab['Spammer']
print '\nThere are %d contacts in the address-book\n' % len(ab)
for name, address in ab.items():
	print 'Contact %s at %s' % (name, address)
if 'Guido' in ab: # OR ab.has_key('Guido')
	print "\nGuido's address is %s" % ab['Guido']
				

الخرْج

$ python using_dict.py
Swaroop's address is [email protected]
There are 4 contacts in the address-book
Contact Swaroop at [email protected]
Contact Matsumoto at [email protected]
Contact Larry at [email protected]
Contact Guido at [email protected]
Guido's address is [email protected]
				

كيف يعمل

قمنا بصنع القاموس ab باستخدام الترقيم الذي سبق مناقشته. ثم شغلنا أزواج key/value من خلال تحديد المفتاح باستخدام عامل الفهرسة indexing operator كما نوقش في الكلام عن lists و tuples. نلاحظ ان التركيب بسيط جدا للقواميس كذلك.

ويمكننا ان نضيف أزواج جديدة من key/value ببساطة عن طريق استخدام indexing operator للوصول الى مفتاح واسناد قيمة إليه، كما فعلنا ل Guido في الحالة المذكورة اعلاه.

يمكننا حذف أزواج المفتاح/القيمة باستخدام صديقنا القديم البيان del. نحن ببساطة نحديد القاموس indexing operator لإزالة المفتاح وتمرير ذلك إلى البيان del. ليست هناك حاجة لمعرفة القيمه المقابلة للمفتاح في هذه العملية.

بعد ذلك نصل إلى كل زوج من key/value في القاموس باستخدام items method من القاموس التي تعيد قائمة من ال tuples حيث كل tuple يحتوي زوجا من البنود – والمفتاح متبوعا بقيمة. نسحب هذا الزوج ونسنده إلى اسم المتغيرات والعنوان المقابل لكل زوج باستخدام الحلقة for..in، ثم نطبع هذه القيم في كتلةfor-block

يمكننا معرفة ما اذا كان زوج key/value موجود باستخدام المشغل inاو حتى طريقة has_key من ال class dict"" تستطيع ان ترى الوثائق للاطلاع على القائمة الكاملة للطرق من ال class dict باستخدام help(dict)

Keyword Arguments and Dictionaries. على صعيد آخر نلاحظ، ان كنت قد استخدمت keyword arguments في الدوال الخاصة بك، ولقد سبق ان استخدمت قواميس! فقط فكر في ذلك – زوج key/value محدد من قِبلِك في قائمة بارامترات تعريف الدالة، وعند تشغيل المتغيرات بداخل الدالة، وهو مجرد مفتاح الوصول إلى القاموس (وهو ما يسمى symbol table في مصطلح تصميم المترجم ) .