نوع التعيين القاموس dictionary

نوع التعيين القاموس dictionary

نوع التعيين القاموس dictionary

بيانات التعيين: Mapping Type او القيم المسماة تاتي في بايثون علي شكل قاموس dictionary { } توضع البيانات مرتبة بين الاقواس في شكل ازواج مفتاح : وبيانات.

بايثون القاموس dictionary

القاموس هو احد اهم حاويات البيانات في لغات البرمجة بسبب قابليته لتسمية اجزاء البيانات واستدعائها بالاسم وليس بالفهرس.

بايثون مثال علي القاموس dictionary

x = {
     "name":"ahmed",
     "age":15,
     "phone": "54121215",
     "address": "21 fake st."
    }
print(x['name'])
print(x['age'])
print(x['phone'])
print(x['address'])

كما تشاهد كل جزء من البيانات له مفتاح ( name, age, phone, address ) ، من خلال هذه المفاتيح قمنا بطباعة البيانات.

في القاموس يجب ان لا يتكرر المفتاح والا حدثت مشكلة بمعني اذا كان هناك مفتاح باسم name لا يمكن انشاء مفتاح اخر بنفس الاسم.

بايثون مثال علي قاموس متعدد البيانات

x = {
       "string": "ahmed",
       "integer": 2006,
       "list":[1,2,3],
       "tuple":(1,2,3),
       "boolean": False,
       "dict": {"a": 1520,"b": 545454}
       }
print(x['string'])
print(x['integer'])
print(x['list'])
print(x['tuple'])
print(x['boolean'])
print(x['dict']['a'], x['dict']['b'])

في القاموس x قمنا بادخال بيانات من انواع متعددة ثم قمنا بطباعتها ، لاحظ اخر سطر طباعه قمنا بطباعة قيم a, b الموجوده في القاموس الفرعي باسم dict ، ويمكن متابعة التفرع حسب نوع البيانات.

طباعة عدد المفاتيح في القاموس

من المهم جدا معرفة عدد العناصر التي تتعامل معها وكما كنا نعد عدد عناصر القائمة ، والمصفوفة ، والمجموعة كذلك يمكننا مع القاموس من خلال دالة len.

x = {
       "string": "ahmed",
       "integer": 2006
       }
print(len(x))

في القاموس السابق لا يوجود الا مفتاحان فقط لذلك المخرجات هي 2 ، قم باضافة المزيد من ازواج البيانات واعد التشغيل ، وشاهد الاختلاف.

تعديل بيانات القاموس

يمكن تعديل اي بيانات داخل القاموس من خلال المفتاح [""] ثم عامل = ثم القيمة الجديدة.

مثال تغير قيمة مفتاح داخل القاموس

x = {
       "string": "ahmed",
       "integer": 2006,
       "list":[1,2,3],
       "tuple":(1,2,3),
       "boolean": False,
       "dict": {1: 1520, 2: 545454}
       }
x['string'] = "mohamed"
x["integer"] = 1950
x["list"][0] = 2023
x['dict']['a'] = 9999999999
x['dict']['b'] = 5555555555
print(x)

كما تشاهد تم تغيير القيم الي القيم الجديدة حتي القيم الفرعية تم تغييرها ، ولاحظ انه في حالة القائمة list استخدمنا رقم الفهرس index ، وفي حالة dict استخدمنا المفتاح key ، وهذا هو القانون الذي عليك التوقف قليلاً لتفهمه.

اذا كان نوع البيانات من انواع التسلسل يجب استخدام الفهرس index وهو رقم صحيح يبدا من 0.

واذا كان نوع البيانات من بيانات التعيين dictionary يجب استخدام المفتاح ويمكن ان يكون المفتاح من النوع الرقمي او النصي او المنطقي (integer, string, boolean).

مثال علي انواع مفاتيح القاموس في بايثون

x = {
       1: 5000,
       "website": "brmgha",
       True: 0,
       False: 1
       }

print(x[1])
print(x["website"])
print(x[True])
print(x[False])

في المثال السابق سوف تلاحظ خطا في النتائج والسبب في ان بايثون تري الـ 1 يساوي True والعكس صحيح وتري 0 يساوي False والعكس صحيح.

اضافة مفتاح جديد الي القاموس dictionary

يمكن التصريح عن قاموس فارغ واضافة البيانات اليه لاحقاً ، كما يمكن تعديل اي قيمة او حذف المفتاح بالكامل.

بايثون مثال علي اضافة بيانات الي قاموس dict

x = {}

x['name'] = 'ahmed'
x['age'] = 15
print(x)

كما تلاحظ تم اضافة ازواج البيانات داخل القاموس علي شكل مفتاح وقيمة، ويمكن اضافة اي عدد من البيانات الي القاموس.

في الدرس السابق تعرفنا علي نوع بيانات التسلسل "range" واستخدمناها مع حلقة التكرار "for loop" لم لا نستخدمهم في تعبئة قاموس فارغ.

بايثون مثال علي تعبئة قاموس بواسطة حلقة تكرار

x = {}

for i in range(0,5):
    x[i] = i * i

print(x)
print(x[4])

في هذا المثال صرحنا عن قاموس فارغ، واستخدمنا حلقة التكرار مع النطاق range للتكرار من 0 الي 5 ، وداخل حلقة التكرار استخدمنا متغير التكرار i في هيئة مفتاح وجعلنا قيمتة تساوي متغير i مضروب في i.

حذف المفتاح والقيمة من القاموس dict

لحذف العناصر من القاموس يجب استخدام الكلمة المحجوزة del وهي لحذف عنصر من القاموس من خلال المفتاح.

بايثون مثال حذف زوج بيانات من القاموس dict

x = {}

for i in range(0,5):
    x[i] = i * i

print(x)
del x[4]
print(x)

اذا قمت بتشغيل سكربت بايثون السابق سوف تلاحظ انه تم حذف المفتاح 4 + القيمة الخاصة به من القاموس x من خلال استعمال الكلمة المحجوزة del ، ويمكن الحذف من خلال حلقة تكرار كما اضفنا البيانات سوف نقوم بحذفها.

بايثون مثال حذف عناصر قاموس من خلال حلقة تكرار

x = {}

for i in range(0, 21):
    x[i] = i * i
print(x)

for i in range(0, 11):
    del x[i]
print(x)

في سكربت بايثون السابق قمنا بعمل تكرار من 0 الي 21 وقمنا بتعبئة البيانات الي القاموس ، وفي التكرار الثاني جعلنا بداية التكرار من 0 الي 11 وداخل التكرار استخدمنا الكلمة del لحذف العنصر الحالي من القاموس x.

ونتيجة الطباعة الاول هي قاموس من 0 الي 20 ، ونتيجة الطباعة الثانية قاموس من 11 الي 20 .

التكرار المباشر عبر المفتاح والقيمة

x = {11: 121, 12: 144, 13: 169, 14: 196, 15: 225, 16: 256, 17: 289, 18: 324, 19: 361, 20: 400}

for k, v in x.items():
    print(k, v)

في سكربت بايثون السابق استخدمنا الدالة items لارجاع ازواج البيانات في شكل قائمة تحتوي علي مجموعات زوجية يرمز لهم بمتغيرين k للمفتاح ، و v للقيمة.

التحقق من وجود عنصر في القاموس

في الامثلة السابقة تمت اضافة البيانات يدوياً من خلالنا ونعرف كل اسماء المفاتيح في القاموس ، وعلي هذا الاساس فلا وجود للاخطاء ، ولكن اثناء البرمجة الفعلية اذا كان المفتاح غير موجود سوف ينتج عن هذا خطا يتسبب في ايقاف سكربت بايثون.

لذلك يستخدم المبرمجين اسلوب التحقق قبل تنفيذ العمليات ، لتفادي المشاكل او لتنفيذ عمليات مختلفة حال وجودة او عدم وجودة ، يمكن فعل هذا باكثر من اسلوب ولكن ابسطهم هو الكلمة المحجوزة ( in ) بمعني ( في ) وهي تستخدم دائما للسؤال والرد ( True او False ) بمعني ( صح او خطا ).

بايثون مثال علي التحقق من وجود مفتاح في قاموس dict

x = {}

for i in range(0, 21):
    x[i] = i * i
print(x)
print(5 in x)
print(100 in x)

لاحظ مخرجات print في اخر سطرين 5 موجود في x لذلك المخرجات True و 100 غير موجود لذلك المخرجات False.

ليس هذا فقط يمكن ايضا التحقق بالنفي او بعدم وجوده في القاموس باستخدام الجملة ( not in ) بمعني ( ليس في ).

x = {}

for i in range(0, 21):
    x[i] = i * i
print(x)
print(5 not in x)
print(100 not in x)

وفي هذا المثال سوف تجد النتائج معكوسة لان السؤال بالنفي/بعدم الوجود/not in.

مثال عام علي القاموس dictionary في بايثون

students = {
    "Ahmed":{"Math":"A","Science":"D","Draw":"B","Sports":"C","Thinking":"A"},
    "Sayed":{"Math":"B","Science":"B","Draw":"B","Sports":"D","Thinking":"A"},
    "Mahmoud":{"Math":"D","Science":"A","Draw":"A","Sports":"B","Thinking":"B"}
}
outp ='''\n"____________________________"
"-- Student Name => %s"
"____________________________"
"- Math => %s Points"
"- Science => %s points"
"- Draw => %s points"
"- Sports => %s points"
"- Thinking => %s points"
"- Total Points For %s Is %s"
'''
deg = {"A": 100, "B": 50, "D": 75, "C": 25}
for k, v in students.items():
    math = deg[v["Math"]]
    Science = deg[v["Science"]]
    Draw = deg[v["Draw"]]
    Sports = deg[v["Sports"]]
    Thinking = deg[v["Thinking"]]
    print(outp % (k, math, Science, Draw, Sports, Thinking, k, sum([math, Science, Draw, Sports, Thinking])))

الاختبار

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

  • dic
  • key

بعد انشاء الدالة وعواملها؛ من داخل كتلة الدالة ابداء الكتابة وافعل الاتي:

عامل dic دائما سوف يحتوي علي قاموس وعامل key سوف يحتوي علي مفتاح ؛ قم بالتحقق من وجود عامل key في القاموس dic ، ثم قم بارجاع الناتج بواسطة return وليس print.

مثال 

def xyz(dic, key)
    x = .............
    return x
 

سوف يقوم النظام لدينا بتشغيل الدالة خاصتك بشكل متكرر وارسال بيانات مختلفة في كل مرة الي العوامل dic , key.

ان كنت لا تعرف كيفية التصريح عن الدوال وعوامل الدالة وارجاع البيانات قم بمراجعة درس مقدمة عن الدوال.

حلول الاعضاء
فتح الحلول مقابل 5
مقفل
output
terminal

Next

التعليقات

no comments found.
  • من خلال الضغط علي زر {;} في شريط الادوات يمكنك اضافة اكواد بايثون الي التعليق للتجربة اون لاين.
  • برجاء مراعاة قواعد الكتابة، والادب.