Dictionaries - Learn Python 3 - Snakify

Lesson 11
قواميس


1. قواميس

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

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

فكر في مثال بسيط. احصل على قاموس Capitals ، حيث يكون الفهرس هو اسم البلد ، والقيمة - اسم عاصمة هذا البلد. الآن على التوالي مع اسم البلد يمكننا بسهولة تحديد عاصمة لها.

# قم بإنشاء Dict Capital فارغة
Capitals = dict()

# املأها ببعض القيم
Capitals['Russia'] = 'Moscow'
Capitals['Ukraine'] = 'Kiev'
Capitals['USA'] = 'Washington'

Countries = ['Russia', 'France', 'USA', 'Russia']

for country in Countries:
  # لكل بلد من القائمة تحقق لمعرفة ما إذا كان في قاموس العواصم
    if country in Capitals:
        print('The capital of ' + country + ' is ' + Capitals[country])
    else:
        print('The capital of ' + country + ' is unknown')

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

نحن معتادون على القواميس من حولنا ، والقواميس الورقية المعتادة (تعريف ، أحادي اللغة ، ثنائية اللغة). بالنسبة لتعريف القاموس ، فإن المفتاح هو الكلمة (عنوان المقالة) ، والقيمة هي المقالة نفسها ، ومن أجل الوصول إلى المقالة ، يجب عليك تحديد الكلمة المفتاحية.

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

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

في بايثون ، يمكن أن يكون المفتاح أي نوع بيانات ثابت (غير قابل للتغيير): الأعداد الصحيحة والأرقام الحقيقية ، السلاسل ، الصفوف. المفتاح في القاموس قد لا تكون مجموعة، ولكن قد يكون عنصرا من نوع frozenset : نوع بيانات خاص التناظرية من نوع set التي لا يمكن تعديلها بعد الخلق. يمكن أن تكون قيمة عنصر القاموس أي نوع بيانات ، بما في ذلك قابل للتعديل.

Advertising by Google, may be based on your interests

2. تطبيق القواميس

يتم استخدام القواميس في الحالات التالية:

  • لحساب عدد بعض الكائنات. في هذه الحالة ، تحتاج إلى إنشاء قاموس حيث تكون المفاتيح كائنات والقيم هي مبالغ.
  • تخزين أي بيانات مرتبطة بالكائن. المفاتيح هي كائنات ، والقيم المرتبطة بالبيانات. على سبيل المثال ، إذا كنت تريد تحديد رقم التسلسل الخاص بالشهر باسمه ، فيمكنك القيام بذلك باستخدام القاموس Num['January'] = 1; Num['February'] = 2; ...
  • ضبط المراسلات بين الكائنات (على سبيل المثال ، "أصل - سليل"). المفتاح هو الكائن والقيمة هي الكائن المناظر.
  • إذا كنت تحتاج إلى مصفوفة بسيطة ، لكن القيمة القصوى لمؤشر العنصر كبيرة جدًا ، على الرغم من أنه لن يتم استخدام جميع الفهارس المحتملة (يطلق عليها "مجموعة متفرقة") ، يمكنك استخدام مصفوفة اقتران لتوفير الذاكرة.

    يمكن إنشاء قاموس فارغ باستخدام الدالة dict() أو زوج فارغ من الأقواس المتعرجة {} (وهذا في الواقع السبب في عدم استخدام الأقواس المتعرجة لإنشاء مجموعة فارغة). لإنشاء قاموس مع مجموعة من القيم الأولية ، يمكنك استخدام الإنشاءات التالية:

    Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'}
    Capitals = dict(RA = 'Moscow', Ukraine = 'Kiev', USA = 'Washington')
    Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")])
    Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"]))
    print(Capitals)
    

    لا يمكن استخدام الطريقتين الأوليين إلا لإنشاء قواميس صغيرة من خلال سرد جميع عناصرها. بالإضافة إلى ذلك ، في الطريقة الثانية ، يتم تمرير المفاتيح كمعلمات مسماة dict ، لذا في هذه الحالة ، يمكن أن تكون المفاتيح سلاسل فقط ، ومُعرِّفات صحيحة فقط. في الحالتين الثالثة والرابعة ، يمكنك إنشاء قواميس كبيرة ، إذا كانت الحجج المنقولة قائمة جاهزة ، والتي لا يمكن الحصول عليها فقط من خلال إدراج جميع العناصر ، ولكن يتم إنشاؤها بأي طريقة أخرى أثناء تنفيذ البرنامج. في الطريق الثالث وظيفة dict يحتاج إلى تلقي قائمة حيث كل عنصر هو الصفوف (tuple) من عنصرين: مفتاح وقيمة. تستخدم الطريقة الرابعة وظيفة zip ، والتي تحتاج إلى الحصول على قائمتين متساويتين في الطول: قائمة بالمفاتيح وقائمة القيم.

    Advertising by Google, may be based on your interests
  • 3. العمل مع عناصر القاموس

    العملية الأساسية: الحصول على قيمة العنصر من خلال مفتاحه. هو مكتوب بالضبط مثل القوائم: A[key] . إذا لم يكن هناك عنصر بمفتاح محدد في القاموس ، فإنه يقوم KeyError الاستثناء KeyError .

    طريقة أخرى لتعريف القيمة استناداً إلى مفتاح هي طريقة get : A.get(key) . إذا كان هناك أي عنصر مع مفتاح get في القاموس، فإنها ترجع None . في النموذج مع A.get(key, val) ترجع طريقة A.get(key, val) val ، إذا لم يكن العنصر الذي يحتوي على المفتاح key A.get(key, val) في القاموس.

    لمعرفة ما إذا كان العنصر ينتمي إلى عمليات القاموس in not in استخدامها ، كما هو الحال بالنسبة للمجموعات.

    لإضافة عنصر جديد إلى القاموس تحتاج فقط إلى تعيينه مع بعض القيمة: A[key] = value .

    لإزالة عنصر من القاموس ، يمكنك استخدام del A[key] (العملية KeyError استثناء KeyError إذا لم يكن هناك مثل هذا المفتاح في القاموس.) فيما يلي طريقتان KeyError لإزالة عنصر من القاموس.

    A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'}
    
    key = 'ac'
    if key in A:
        del A[key]
    
    try:
        del A[key]
    except KeyError:
    	print('There is no element with key "' + key + '" in dict')
    print(A)
    

    في الحالة الأولى ، نتحقق أولاً من وجود عنصر ، ثم نلتقط الاستثناء ونعالجه.

    هناك طريقة أخرى لإزالة عنصر من القاموس وهي الطريقة pop : A.pop(key) . تقوم هذه الطريقة بإرجاع قيمة العنصر الذي تمت إزالته وإذا لم يكن العنصر مع المفتاح المحدد موجودًا في القاموس ، فسيتم رفع استثناء. إذا كان pop الأسلوب يتلقى معلمة ثانية ، فإن العنصر المفقود سوف يعيد قيمة هذه المعلمة. هذا يسمح لتنظيم بأمان إزالة العنصر من القاموس: A.pop(key, None) .

    Advertising by Google, may be based on your interests

    4. قاموس متكرر

    يمكنك بسهولة التكرار من خلال مفاتيح جميع العناصر في القاموس:

    A = dict(zip('abcdef', list(range(6))))
    for key in A:
        print(key, A[key])
    

    الطرق التالية ترجع تمثيل عناصر القاموس. تشبه التمثيلات المجموعات ، ولكنها تتغير ، إذا قمت بتغيير قيم العناصر. تقوم keys الأسلوب بإرجاع تمثيل مفاتيح كافة العناصر ، حيث تقوم values بإرجاع تمثيل لكافة القيم ، وتقوم items الأسلوب بإرجاع تمثيل لكافة الأزواج (tuples) للمفاتيح والقيم.

    وبالتالي ، لفحص سريع ما إذا كانت قيمة val هي من بين جميع قيم القاموس A يجب استخدام val in A.values() condition val in A.values() . للتكرار من خلال المفاتيح والمتغيرات ، يمكنك القيام بما يلي:

    A = dict(zip('abcdef', list(range(6))))
    for key, val in A.items():
        print(key, val)
    
    Advertising by Google, may be based on your interests