بايثون3 مِن مدارس w3-18Python Dictionaries
اقتبس من ابراهيم حمادة في 24 فبراير، 2021, 8:48 صتنويه:
لِأن التاب لا تظهر على الصفحة, و هي شيء مهم جدا في الإزاحة في كود بايثون
لذلك فإننا سنستبدل التاب بالكلمة 'tab' على هذه الصفحة
و مِن الأفضل إذا شئت أن تنسخ أي كود, أن تأخذه مِن الملف النصي, أو الملفات المُرفقة.
القواميس في بايثونالقاموس(dictionary)
القاموس هو مجموعة غير مرَتبة وقابلة للتغيير ومفهرسة.
تتم كتابة القواميس في بايثون بأقواس معقوفة {}, ولديها مفاتيح وقيَم.
مثال
إنشاء وطباعة قاموس:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(thisdict)النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
جربها بنفسك مِن ملف dictionary.pyالوصول إلى العناصر
يمكنك الوصول إلى عناصر القاموس بالإشارة إلى قيمةْ المفتاح، داخل الأقواس المربعة:
مثال
الحصول على قيمة مفتاح "model":
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = thisdict["model"]
print(x)ستكون النتيجة:
Mustang
جربها بنفسك مِن ملف dictionary_access.pyهناك أيضاً وظيفة تُسمى get() التي ستعطيك نفس النتيجة:
مثال
الحصول على قيمة مفتاح "model":
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = thisdict.get("model")
print(x)ستكون النتيجة:
Mustang
جربها بنفسك مِن ملف dictionary_get.pyتغيير القيم
يمكنك تغيير قيمةْ عنصر معين بالإشارة إلى اسم المفتاح الخاص به:
مثال
تغيير "year" إلى 2018:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict["year"] = 2018
print(thisdict)ستكون النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 2018}
جربها بنفسك مِن ملف dictionary_change.pyحلقة من خلال القاموس
يمكنك إجراء حلقة من خلال قاموس باستخدام الحلقة for.
عند عمل حلقة مِن خلال القاموس ، تكون القيم التي سنحصل عليها هي مفاتيح القاموس ، ولكن هناك طرق لإرجاع القيم أيضًا.
مثال
طباعة جميع أسماء المفاتيح في القاموس ، واحدًا تلو الآخر:
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for x in thisdict:
tab print(x)النتيجة:
brand
model
year
جربها بنفسك مِن ملف dictionary_loop.pyمثال
طباعة جميع القيم في القاموس واحدة تلو الأخرى:
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for x in thisdict:
tab print(thisdict[x])النتيجة:
Ford
Mustang
1964
جربها بنفسك مِن ملف dictionary_loop2.pyمثال
يمكنك أيضًا استخدام الوظيفة values() لإرجاع قيَم القاموس:
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for x in thisdict.values():
tab print(x)النتيجة:
Ford
Mustang
1964
جربها بنفسك مِن ملف dictionary_loop_values.pyمثال
حلقة من خلال كل من المفاتيح والقيم ، وذلك باستخدام الوظيفة items():
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for x, y in thisdict.items():
tab print(x, y)النتيجة:
brand Ford
model Mustang
year 1964
جربها بنفسك مِن ملف dictionary_loop_items.pyالتحقق من وجود مفتاح في القاموس
لِمعرفةْ ما إذا كان مفتاح معين موجود في القاموس ، استخدم الكلمة الرئيسية in:
مثال
تحقق مما إذا كان "model" موجودًا في القاموس:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
if "model" in thisdict:
tab print("Yes, 'model' is one of the keys in the thisdict dictionary")ستكون النتيجة:
Yes, 'model' is one of the keys in the thisdict dictionary
جربها بنفسك مِن ملف dictionary_in.pyطول القاموس
لتحديد عدد العناصر (العنصر هنا يعني المفتاح والقيمة معاً) في القاموس ، استخدم الوظيفة len() .
مثال
طباعة عدد العناصر في القاموس:
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}print(len(thisdict))
ستكون النتيجة:
3
جربها بنفسك مِن ملف dictionary_length.pyإضافة عناصر إلى القاموس
تتم إضافة عنصر إلى القاموس باستخدام مفتاح جديد وإعطاء قيمة له:
مثال
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict["color"] = "red"
print(thisdict)النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'color': 'red'}
جربها بنفسك مِن ملف dictionary_add.pyإزالة العناصر مِن القاموس
هناك عدة طرق لإزالة العناصر من القاموس:
مثال
تقوم وظيفة pop() بإزالة العنصر باستخدام اسم المفتاح المحدد:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.pop("model")
print(thisdict)النتيجة:
{'brand': 'Ford', 'year': 1964}
جربها بنفسك مِن ملف dictionary_pop.pyمثال
تقوم الوظيفة popitem() بإزالةْ آخر عنصر مدْرج في القاموس.
(أما في الإصدارات قبل 3.7 ، تتم إزالة عنصر عشوائي بدلاً من ذلك):
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.popitem()
print(thisdict)النتيجة:
{'brand': 'Ford', 'model': 'Mustang'}
جربها بنفسك مِن ملف dictionary_popitem.pyمثال
تقوم الكلمة الرئيسية del بإزالة العنصر بلإشارة إلى اسم المفتاح المحدد:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
del thisdict["model"]
print(thisdict)النتيجة:
{'brand': 'Ford', 'year': 1964}
جربها بنفسك مِن ملف dictionary_del2.pyمثال
و باستخدام الكلمة del يمكن أيضا حذف القاموس تماما:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
del thisdict
print(thisdict) #this will cause an error because "thisdict" no longer exists.النتيجة:
Traceback (most recent call last):
File "dictionary_del3.py", line 7, in <module>
NameError: name 'thisdict' is not defined
جربها بنفسك مِن ملف dictionary_del3.pyمثال
تقوم الوظيفة clear() بإفراغ القاموس:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.clear()
print(thisdict)ستكون النتيجة:
{}
جربها بنفسك مِن ملف dictionary_clear.pyنَسخ القاموس
لا يمكنك نَسخ القاموس ببساطة عن طريق كتابة dict2 = dict1 ، لأن: dict2 سيكون فقط إشارة إلى dict1 ،
و أي تغييرات يتم إجراؤها في dict1 تلقائيا سيتم إجراءها في dict2.
يعني بهاذه الطريقة, فإن dict1 و dict2 يُعتبران متغيران يشيران إلى نفس الكائن.
و لكن هناك طرق لعمل نسخة ، إحدى الطرق هي استخدام وظيفة القاموس المتضمنة copy().
مثال
إنشاء نسخة من قاموس باستخدام الوظيفة copy():
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
mydict = thisdict.copy()
print(mydict)النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
جربها بنفسك مِن ملف dictionary_copy.pyهناك طريقة أخرى لعمل نسخة وهي استخدام الوظيفة المضمنة dict(). و هي نفسها وظيثةْ الإنشاء للقاموس.
مثال
عمل نسخة من القاموس باستخدام الدالة dict() :
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
mydict = dict(thisdict)
print(mydict)النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
جربها بنفسك مِن ملف dictionary_copy2.pyالقواميس المتداخلة
يمكن أن يحتوي القاموس أيضًا على العديد من القواميس الأخرى، وهذا ما يسمى بالقواميس المتداخلة.
مثال
إنشاء قاموس يحتوي على ثلاثة قواميس:
myfamily = {
"child1" : {
"name" : "Emil",
"year" : 2004
},
"child2" : {
"name" : "Tobias",
"year" : 2007
},
"child3" : {
"name" : "Linus",
"year" : 2011
}
}print(myfamily)
النتيجة:
{'child1': {'name': 'Emil', 'year': 2004},
'child2': {'name': 'Tobias', 'year': 2007},
'child3': {'name': 'Linus', 'year': 2011}}
جربها بنفسك مِن ملف dictionary_nested.pyأو ، إذا كنت تريد دمج ثلاثة قواميس موجودة مُسبقا بالفعل, في قاموس:
مثال
إنشاء ثلاثة قواميس ، ثُمَّ إنشاء قاموس واحد من شأنِه أن يحتوي على القواميس الثلاثة الأخرى:
child1 = {
"name" : "Emil",
"year" : 2004
}
child2 = {
"name" : "Tobias",
"year" : 2007
}
child3 = {
"name" : "Linus",
"year" : 2011
}myfamily = {
"child1" : child1,
"child2" : child2,
"child3" : child3
}
print(myfamily)النتيجة:
{'child1': {'name': 'Emil', 'year': 2004},
'child2': {'name': 'Tobias', 'year': 2007},
'child3': {'name': 'Linus', 'year': 2011}}
جربها بنفسك مِن ملف dictionary_nested2.pyدالةْ المَنشأ dict()
مِن الممكن أيضاً استخدام دالة الإنشاء dict() لإنشاء قاموس جديد:
مثال
thisdict = dict(brand="Ford", model="Mustang", year=1964)
# note that keywords are not string literals
# note the use of equals rather than colon for the assignment
print(thisdict)النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
جربها بنفسك مِن ملف dictionary_dict.pyوظائف القاموس
يحتوي Python على مجموعة من الوظائف المضمنة التي يمكنك استخدامها في القواميس.clear()
تقوم بإزالة جميع العناصر من القاموس
copy()
تقوم بعمل نسخة من القاموس
fromkeys()
تقوم بإرجاع قاموس مع المفاتيح والقيمة المحددة
get()
تقوم بإرجاع قيمة المفتاح المحدد
items()
تقوم بإرجاع قائمة تحتوي على الصفوف (tuple) لكل زوج مِن المفتاح و القيمة
keys()
تقوم بإرجاع قائمة تحتوي على مفاتيح القاموس
pop()
تقوم بإزالة العنصر صاحب المفتاح المحدد
popitem()
تقوم بإزالة آخر زوج مدْرج من مفتاح و قيمة
setdefault()
تقوم بإرجاع قيمة المفتاح المحدد. إذا لم يكن المفتاح موجودا: تقوم بإدخال المفتاح ، مع القيمة المحددة
update()
تقوم بتحديث القاموس مع أزواج المفاتيح و القيم المحددة
values()
تقوم بإرجاع قائمة تحتوي على جميع القيم في القاموساختبر نفسك مع التمارين
التمرين:
استخدم الوظيفة get لِطباعةْ قيمةْ مفتاح "model" في القاموس car.
car ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print( ...)الإجابة:
x= car.get("model")
print(x)
الدرس مع الملفات المُرفقة:
https://www.dropbox.com/s/xwgxzs9qy7vsuei/18Python%20Dictionaries.zip?dl=1
تنويه:
لِأن التاب لا تظهر على الصفحة, و هي شيء مهم جدا في الإزاحة في كود بايثون
لذلك فإننا سنستبدل التاب بالكلمة 'tab' على هذه الصفحة
و مِن الأفضل إذا شئت أن تنسخ أي كود, أن تأخذه مِن الملف النصي, أو الملفات المُرفقة.
القواميس في بايثون
القاموس(dictionary)
القاموس هو مجموعة غير مرَتبة وقابلة للتغيير ومفهرسة.
تتم كتابة القواميس في بايثون بأقواس معقوفة {}, ولديها مفاتيح وقيَم.
مثال
إنشاء وطباعة قاموس:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(thisdict)
النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
جربها بنفسك مِن ملف dictionary.py
الوصول إلى العناصر
يمكنك الوصول إلى عناصر القاموس بالإشارة إلى قيمةْ المفتاح، داخل الأقواس المربعة:
مثال
الحصول على قيمة مفتاح "model":
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = thisdict["model"]
print(x)
ستكون النتيجة:
Mustang
جربها بنفسك مِن ملف dictionary_access.py
هناك أيضاً وظيفة تُسمى get() التي ستعطيك نفس النتيجة:
مثال
الحصول على قيمة مفتاح "model":
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
x = thisdict.get("model")
print(x)
ستكون النتيجة:
Mustang
جربها بنفسك مِن ملف dictionary_get.py
تغيير القيم
يمكنك تغيير قيمةْ عنصر معين بالإشارة إلى اسم المفتاح الخاص به:
مثال
تغيير "year" إلى 2018:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict["year"] = 2018
print(thisdict)
ستكون النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 2018}
جربها بنفسك مِن ملف dictionary_change.py
حلقة من خلال القاموس
يمكنك إجراء حلقة من خلال قاموس باستخدام الحلقة for.
عند عمل حلقة مِن خلال القاموس ، تكون القيم التي سنحصل عليها هي مفاتيح القاموس ، ولكن هناك طرق لإرجاع القيم أيضًا.
مثال
طباعة جميع أسماء المفاتيح في القاموس ، واحدًا تلو الآخر:
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for x in thisdict:
tab print(x)
النتيجة:
brand
model
year
جربها بنفسك مِن ملف dictionary_loop.py
مثال
طباعة جميع القيم في القاموس واحدة تلو الأخرى:
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for x in thisdict:
tab print(thisdict[x])
النتيجة:
Ford
Mustang
1964
جربها بنفسك مِن ملف dictionary_loop2.py
مثال
يمكنك أيضًا استخدام الوظيفة values() لإرجاع قيَم القاموس:
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for x in thisdict.values():
tab print(x)
النتيجة:
Ford
Mustang
1964
جربها بنفسك مِن ملف dictionary_loop_values.py
مثال
حلقة من خلال كل من المفاتيح والقيم ، وذلك باستخدام الوظيفة items():
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for x, y in thisdict.items():
tab print(x, y)
النتيجة:
brand Ford
model Mustang
year 1964
جربها بنفسك مِن ملف dictionary_loop_items.py
التحقق من وجود مفتاح في القاموس
لِمعرفةْ ما إذا كان مفتاح معين موجود في القاموس ، استخدم الكلمة الرئيسية in:
مثال
تحقق مما إذا كان "model" موجودًا في القاموس:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
if "model" in thisdict:
tab print("Yes, 'model' is one of the keys in the thisdict dictionary")
ستكون النتيجة:
Yes, 'model' is one of the keys in the thisdict dictionary
جربها بنفسك مِن ملف dictionary_in.py
طول القاموس
لتحديد عدد العناصر (العنصر هنا يعني المفتاح والقيمة معاً) في القاموس ، استخدم الوظيفة len() .
مثال
طباعة عدد العناصر في القاموس:
thisdict ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(len(thisdict))
ستكون النتيجة:
3
جربها بنفسك مِن ملف dictionary_length.py
إضافة عناصر إلى القاموس
تتم إضافة عنصر إلى القاموس باستخدام مفتاح جديد وإعطاء قيمة له:
مثال
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict["color"] = "red"
print(thisdict)
النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'color': 'red'}
جربها بنفسك مِن ملف dictionary_add.py
إزالة العناصر مِن القاموس
هناك عدة طرق لإزالة العناصر من القاموس:
مثال
تقوم وظيفة pop() بإزالة العنصر باستخدام اسم المفتاح المحدد:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.pop("model")
print(thisdict)
النتيجة:
{'brand': 'Ford', 'year': 1964}
جربها بنفسك مِن ملف dictionary_pop.py
مثال
تقوم الوظيفة popitem() بإزالةْ آخر عنصر مدْرج في القاموس.
(أما في الإصدارات قبل 3.7 ، تتم إزالة عنصر عشوائي بدلاً من ذلك):
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.popitem()
print(thisdict)
النتيجة:
{'brand': 'Ford', 'model': 'Mustang'}
جربها بنفسك مِن ملف dictionary_popitem.py
مثال
تقوم الكلمة الرئيسية del بإزالة العنصر بلإشارة إلى اسم المفتاح المحدد:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
del thisdict["model"]
print(thisdict)
النتيجة:
{'brand': 'Ford', 'year': 1964}
جربها بنفسك مِن ملف dictionary_del2.py
مثال
و باستخدام الكلمة del يمكن أيضا حذف القاموس تماما:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
del thisdict
print(thisdict) #this will cause an error because "thisdict" no longer exists.
النتيجة:
Traceback (most recent call last):
File "dictionary_del3.py", line 7, in <module>
NameError: name 'thisdict' is not defined
جربها بنفسك مِن ملف dictionary_del3.py
مثال
تقوم الوظيفة clear() بإفراغ القاموس:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
thisdict.clear()
print(thisdict)
ستكون النتيجة:
{}
جربها بنفسك مِن ملف dictionary_clear.py
نَسخ القاموس
لا يمكنك نَسخ القاموس ببساطة عن طريق كتابة dict2 = dict1 ، لأن: dict2 سيكون فقط إشارة إلى dict1 ،
و أي تغييرات يتم إجراؤها في dict1 تلقائيا سيتم إجراءها في dict2.
يعني بهاذه الطريقة, فإن dict1 و dict2 يُعتبران متغيران يشيران إلى نفس الكائن.
و لكن هناك طرق لعمل نسخة ، إحدى الطرق هي استخدام وظيفة القاموس المتضمنة copy().
مثال
إنشاء نسخة من قاموس باستخدام الوظيفة copy():
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
mydict = thisdict.copy()
print(mydict)
النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
جربها بنفسك مِن ملف dictionary_copy.py
هناك طريقة أخرى لعمل نسخة وهي استخدام الوظيفة المضمنة dict(). و هي نفسها وظيثةْ الإنشاء للقاموس.
مثال
عمل نسخة من القاموس باستخدام الدالة dict() :
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
mydict = dict(thisdict)
print(mydict)
النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
جربها بنفسك مِن ملف dictionary_copy2.py
القواميس المتداخلة
يمكن أن يحتوي القاموس أيضًا على العديد من القواميس الأخرى، وهذا ما يسمى بالقواميس المتداخلة.
مثال
إنشاء قاموس يحتوي على ثلاثة قواميس:
myfamily = {
"child1" : {
"name" : "Emil",
"year" : 2004
},
"child2" : {
"name" : "Tobias",
"year" : 2007
},
"child3" : {
"name" : "Linus",
"year" : 2011
}
}
print(myfamily)
النتيجة:
{'child1': {'name': 'Emil', 'year': 2004},
'child2': {'name': 'Tobias', 'year': 2007},
'child3': {'name': 'Linus', 'year': 2011}}
جربها بنفسك مِن ملف dictionary_nested.py
أو ، إذا كنت تريد دمج ثلاثة قواميس موجودة مُسبقا بالفعل, في قاموس:
مثال
إنشاء ثلاثة قواميس ، ثُمَّ إنشاء قاموس واحد من شأنِه أن يحتوي على القواميس الثلاثة الأخرى:
child1 = {
"name" : "Emil",
"year" : 2004
}
child2 = {
"name" : "Tobias",
"year" : 2007
}
child3 = {
"name" : "Linus",
"year" : 2011
}
myfamily = {
"child1" : child1,
"child2" : child2,
"child3" : child3
}
print(myfamily)
النتيجة:
{'child1': {'name': 'Emil', 'year': 2004},
'child2': {'name': 'Tobias', 'year': 2007},
'child3': {'name': 'Linus', 'year': 2011}}
جربها بنفسك مِن ملف dictionary_nested2.py
دالةْ المَنشأ dict()
مِن الممكن أيضاً استخدام دالة الإنشاء dict() لإنشاء قاموس جديد:
مثال
thisdict = dict(brand="Ford", model="Mustang", year=1964)
# note that keywords are not string literals
# note the use of equals rather than colon for the assignment
print(thisdict)
النتيجة:
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964}
جربها بنفسك مِن ملف dictionary_dict.py
وظائف القاموس
يحتوي Python على مجموعة من الوظائف المضمنة التي يمكنك استخدامها في القواميس.
clear()
تقوم بإزالة جميع العناصر من القاموس
copy()
تقوم بعمل نسخة من القاموس
fromkeys()
تقوم بإرجاع قاموس مع المفاتيح والقيمة المحددة
get()
تقوم بإرجاع قيمة المفتاح المحدد
items()
تقوم بإرجاع قائمة تحتوي على الصفوف (tuple) لكل زوج مِن المفتاح و القيمة
keys()
تقوم بإرجاع قائمة تحتوي على مفاتيح القاموس
pop()
تقوم بإزالة العنصر صاحب المفتاح المحدد
popitem()
تقوم بإزالة آخر زوج مدْرج من مفتاح و قيمة
setdefault()
تقوم بإرجاع قيمة المفتاح المحدد. إذا لم يكن المفتاح موجودا: تقوم بإدخال المفتاح ، مع القيمة المحددة
update()
تقوم بتحديث القاموس مع أزواج المفاتيح و القيم المحددة
values()
تقوم بإرجاع قائمة تحتوي على جميع القيم في القاموس
اختبر نفسك مع التمارين
التمرين:
استخدم الوظيفة get لِطباعةْ قيمةْ مفتاح "model" في القاموس car.
car ={
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print( ...)
الإجابة:
x= car.get("model")
print(x)
الدرس مع الملفات المُرفقة:
https://www.dropbox.com/s/xwgxzs9qy7vsuei/18Python%20Dictionaries.zip?dl=1