التعامل مع Dictionary في لغة Python

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

لعمل Dictionary في لغة Python، كل ما علينا حفظه هو القاعدة التالية:

mydict = {'key':'value'}

حيث mydict هو المتغيير الذي سيكون نوعه Dictionary وkey هو المفتاح لقيمة معينة بداخل هذا الفهرس، وبدون شك value هي القيمة لذلك المفتاح … لنأخذ أمثلة الآن:

لعمل Dictionary او فهرس فارغ:

>>> mydict = {}

أو يمكننا إستعمال النوع أو الشيء (لست متأكد عربياً ماذا يسمى الـ Object ولهذا أتمنى فهمه كما هو حالياً) dict لعمل واحد، كما في الأسفل:

>>> mydict = dict()


الآن لنفرض أريد إضافة قيم له … اي أضيف مفاتيح وقيم لهذه المفاتيح، كما في الأسفل:

>>> mydict = {'ali':80,'ahmed':80,'mohammed':90}

أو من خلال التالي:

>>> mydict = dict(ali=1, ahmed=2, mohammed=3)

لطباعة الفهرس الآن يمكن كتابة إسمه مباشرة إذا كنا على الطرفية، ولكنني أفضل إستعمال print وذلك للتعود:

>>> print mydict

الناتج (حسب مثالي بالأعلى) هو:

{'ahmed': 80, 'mohammed': 90, 'ali': 80}

طيب لنفرض نريد التعديل على قيمة؟ كل ما علينا فعله هو تحديد إسم الفهرس مع المفتاح لتلك القيمة، كالتالي:

>>> mydict['ali']=50

ولو قمنا بالتالي:

>>> mydict['yasir']=75

كون المفتاح yasir غير موجود، فإنه سيتم فعلياً إضافته الى الفهرس … وبالتالي هكذا عرفنا كيف نضيف وكيف نعدل على قيمة معينة بداخل الفهرس …

طبعاً يمكننا التعديل على القيم بطرق أخرى، مثل:

>>> mydict.update({'ali':70})

أو:

>>> mydict.update(dict(ali=60))

لنفرض قمنا بعمل فهرس جديد، كالتالي:

>>> mydict2 = dict(maher=70, samer=80, mazin=3)

وبعد ذلك أردنا دمج mydict2 مع الفهرس السابق mydict … هناك طريقة جميلة وسهلة لعمل ذلك من خلال:

>>> mydict.update(mydict2)

طيب ولنفرض نريد حذف مفتاح وقيمته من داخل الفهرس، فكل ما علينا فعله هو:

>>> del mydict['ali']

ولو أردت معرفة ما هي المفاتيح الموجودة لديك:

>>> mydict.keys()

ولمعرفة القيم التي موجودة لديك:

>>> mydict.values()

تستطيع ان تستعرض المفاتيح وكذلك الدليل أو الموقع لها من خلال إستعمال for loop مع الدالة enumerate بالشكل التالي:

>>> for i, v in enumerate(mydict):
...     print i, v
... 

بعض الأحيان تود أن تقوم بعمل طباعة لجميع المفاتيح والقيم التابعة لها، كل ما عليك فعله هو إستعمال الدالة iteritems بالشكل التالي:

>>> for k, v in mydict.iteritems():
...     print k, v
... 

الـ Dictionary في لغة بايثون بحر، سوف أكتفي بهذا القدر … أتمنى أن يكون محل فائدة لي ولجميع من يمر من هنا …

مصادر: الأول | الثاني | الثالث

بالتوفيق …

6 thoughts on “التعامل مع Dictionary في لغة Python

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

  2. Abdelmadjid Cherfaoui @ حياك الله أخي عبد المجيد، يا هلا ومرحبا بك … أشكرك على كلامك الطيب وبالحقيقة مثل هذه التدوينات لا يمكن أن ينتهي الشرح فيها ولهذا تركت الباب مفتوح لمن يرغب بالإضافة … بخصوص طارق، فبدون شك يمكن ذلك، هو مفتوح المصدر أصلاً. هل هناك شيء معيين ترغب بعمله؟

  3. شكرا أخي الكريم،سأحاول نقله إلى بايثون 3 و أضيف بعض الأفكار التي تدور في رأسي و هي كثيرة و الحمد لله.
    لدي سؤال حول الباك تراك،لدي اتصال WAN و الشركة تستخدم الـPPPoE من أجل الإتصال و لدي بعض المشاكل في الإتصال بالنت في النظام بالرغم من أنه كان يعمل بشكل جيد قبلا

  4. أخي عبد المجيد. فقط أحب أنوه لك، على موضوع نقل طارق الى بايثون3. المشكلة التي سوف تواجهك ليست في بايثون بذاتها وإنما في Scapy … والذي الى الآن لم يتم نقله للعمل على بايثون3 … ولهذا أنا توقفت للأمانة عن ذلك بعد محاولات للتلاعب بالموضوع وفشلت … ربما انا لست بذلك المبرمج صحيح، ولكن هذا ما أستطعت القيام به … ولهذا عملية نقله الى هناك حاليا متوقفة … بخصوص مشكلة الإتصال، بما إنه كان يعمل والآن لم يعد كذلك؟ لماذا تظن الخلل من النظام وليس من الإتصال والشبكة نفسها؟

    أتمنى أن تقوم بفتح موضوع في مجتمع لينُكس العربي بهذا الخصوص :)

  5. There’s a problem in writing technically in arabic, so I’ll write in English Sorry :)

    Python dictionaries are very powerful, the reason is that they’re built in the language itself.They’re very easy to use unlike other languages like Java where dictionaries are tedious and need lots of code to handle.
    The concept of dictionaries can be found everywhere , see for example :

    Memory caches are nothing but large dictionaries.
    Example:

    cache = {}

    def function_doing_db_query():
    ali = cache.get(‘ali’): # get returns None if key not found
    if not ali: # Cache miss
    ali = database.select(name=’ali’) # Query database
    cache[‘ali’] = ali # Add cache entry
    return ali

    Dictionaries search is O(1) [Takes const time, whatever the size of the dictionary]
    So you can find any key instantly, and the cost is nothing.

    No sql databases use no structure at all in their documents, so documents look like dictionaries [d1 = {‘name’:’ali’, ‘image’:’serialized image’}, ‘job’:’admin’}]
    [d2={‘name’:’ahmed’}]
    Note that d2 doesn’t have to contain: image, nor job fields
    The point is : in programming No sql documents, usually dictionaries are used to represent Documents.

    In python also, you can define classes to act as dictionaries, by extending the dict data type and playing with some special functions.
    This is very useful when you want some object to act as a dictionary but in the same time provide some other useful (custom) functions that do some work on data.

    Dictionaries are used to represent session objects in web frameworks as session are nothing but key/value pairs.
    Dictionaries are used to represent headers, responses, and requests objects as well.
    In fact, in python itself the local variables are saved in a dictionary to represent the local scope.

    Dictionaries are everywhere and one of the most important data structure ever.

  6. hamdy@ قبل كل شيء نورت الزون يا حمدي، زماااااااااااااااااان لم أسمع منك شيء …
    بخصوص ردك صراحة wow … وأشكرك جزيل الشكر عليه ليس فقط لأنك أفدتني بشيء جديد ولكن لأني متأكد كل من سيقرأ هذه التدوينة سيلاحظ هذه الإضافة الرائعة منك … كما تعلم أنا لست مبرمج ولكني تعلمت بايثون لأغراض عدة والحمد لله أحاول زيادة معلوماتي شيئاً فشيئاً وحسب قدراتي وما يسمحه وقتي … صراحة كما قلت في آخر جملة في ردك بإنه الـ Dictionaries أحد أهم هياكل البيانات الموجودة … أذكر درست سي++ وجافا وكذلك باسكال ولكني لا أذكر في أحدى هذه اللغات ميزة مثل هذه التي في بايثون … وكان لعمل مثل هذه على ما أذكر كنت تضطر لعملها برمجياً بنفسك ولهذا لم يكن أساتذتي يعتبرونها أحدى هياكل البيانات …

    بصراحة يا حمدي لغة بايثون لا تعلم كم عشقتها وذلك للإمكانيات التي تقدمها وللسهولة التي توفرها لي كمبرمج بسيط يريد أن يحل بعض مشاكله التقنية من خلال لغة برمجة بسيطة … كل يوم يزداد عشقي لها وصعب أوصف لك كم أحاول جاهداً أن أوصل هذا الأمر لطلابي في الجامعة … الحمد لله هناك الكثير أدرك ذلك وبدأ بالفعل بعمل مشاريع عليها ولكن الكثير لازال يعتقد بإن القوة في نوعية اللغة وليس الإمكانيات والسهولة التي توفرها لك …

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

    همسة: سأقوم بعمل ترتيب للنص ليضهر بشكل جميل إذا لم يكن لديك مانع …

    دمت بود

Comments are closed.