English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، سنتعلم كيفية استخدام فهم القواميس في بايثون وكيفية استخدامه في أمثلة.
القواميس هي نوع بيانات في بايثون تسمح لنا بتخزين البيانات فيفي مفتاح/قيمة زوج. على سبيل المثال:
my_dict = {1: 'apple', 2: 'ball'}
للحصول على معلومات إضافية حولها، يرجى زيارة:قواميس بايثون
فهم القواميس هو طريقة رائعة وسهلة لإنشاء قواميس.
خذ هذا الكود:
square_dict = dict() for num in range(1, 11): square_dict[num] = num*num print(square_dict)
الآن، دعونا نستخدم دالة فهم القواميس لإنشاء قائمة في البرنامج السابق.
# مثال فهم القواميس square_dict = {num: num*num for num in range(1, 11)} print(square_dict)
سيكون خروج هذين البرنامجين متطابقًا.
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
في هذين البرنامجين، قمنا بإنشاء square_dict يحتوي علىمفتاح/قيمة مربعةقواميسنا.
لكن استخدام فهم القواميس يمكن أن يجعلنافي سطر واحدإنشاءالقواميس.
من خلال النظر في الأمثلة السابقة، يمكننا رؤية أن فهم القواميس يجب أن يكون مكتوبًا وفقًا لم��ل معين.
أبسط جملة لفهم القواميس هي:
dictionary = {key: value for vars in iterable}
دعونا نقارن هذا الجدل مع مثال السابق من فهم القواميس.
الآن، دعونا نرى كيف يمكننا استخدام بيانات قائمة أخرى لاستخدام فهم القواميس.
#item price in dollars old_price = {'milk': 1.02, 'coffee': 2.5, 'bread': 2.5} dollar_to_pound = 0.76 new_price = {item: value*dollar_to_pound for (item, value) in old_price.items()} print(new_price)
نتائج الإخراج
{'milk': 0.7752, 'coffee': 1.9, 'bread': 1.9}
في هذه الحالة، يمكننا رؤية أننا نبحث عن أسعار المنتجات بالدولار ونحولها إلى الجنيه الإسترليني. يجعل التفهم القائمة المرتبة هذه المهمة أسهل وأسرع.
يمكننا تحسين تفهم القائمة المرتبة بإضافة شروط. دعونا نرى مثالاً.
original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33} even_dict = {k: v for (k, v) in original_dict.items() if v % 2 == 0} print(even_dict)
نتائج الإخراج
{'jack': 38, 'michael': 48}
يمكننا رؤية أن العناصر التي تحتوي على قيم زوجية فقط تم إضافتها بسبب جمل تفهم القائمة المرتبة.
original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33} new_dict = {k: v for (k, v) in original_dict.items() if v % 2 != 0 if v < 40} print(new_dict)
نتائج الإخراج
{'john': 33}
في هذه الحالة، تم إضافة العناصر التي لها قيم زوجية أقل من 40 إلى القائمة المرتبة الجديدة.
هذا لأن تفهم القائمة المرتبة يحتوي على جمل متعددة. إنها تساوي عملية "و" التي يجب أن تتمشى مع شروطين في نفس الوقت.
original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33} new_dict_1 = {k: ('قديم' if v > 40 else 'شاب') for (k, v) in original_dict.items() print(new_dict_1)
نتائج الإخراج
{'jack': 'شاب', 'michael': 'قديم', 'guido': 'قديم', 'john': 'شاب'}
في هذه الحالة، سيتم إنشاء قائمة مرتبة جديدة باستخدام التفهم الفرعي.
المنتجات التي قيمتها تساوي أو تزيد عن 40 قيمة "قديم"، والمنتجات الأخرى قيمة "شاب".
يمكننا فهم أن إضافة مفهوم التفهم إلى التفهم يمكن أن يخلق قائمة مرتبة من القواميس. دعونا نرى مثالاً.
dictionary = { k1: {k2: k1 * k2 for k2 in range(1, 6)} for k1 in range(2, 5) } print(dictionary)
نتائج الإخراج
{2: {1: 2, 2: 4, 3: 6, 4: 8, 5: 10}, 3: {1: 3, 2: 6, 3: 9, 4: 12, 5: 15}, 4: {1: 4, 2: 8, 3: 12, 4: 16, 5: 20}}
كما ترون، قمنا ببناء جدول ضرب في النطاق من 2 إلى 4.
عند استخدام فهم القواميس المدمجة، يبدأ Python دائمًا بالدورات الخارجية قبل الدخول إلى الدورات الداخلية.
لذلك، الكود المذكور أعلاه يعادل:
dictionary = dict() for k1 in range(11, 16): dictionary[k1] = {k2: k1*k2 for k2 in range(1, 6)} print(dictionary)
يمكن توسيعه بشكل أكبر:
dictionary = dict() for k1 in range(11, 16): dictionary[k1] = dict() for k2 in range(1, 6): dictionary[k1][k2] = k1*k2 print(dictionary)
كل هذه البرامج تنتج نفس الناتج.
كما رأينا، يقلل فهم القواميس بشكل كبير من عملية إعداد القواميس. يجعل الكود أكثر نمطًا بريتوني.
يمكننا استخدام فهم القواميس في كودنا لتقليل عدد أسطر الكود بينما الحفاظ على شمولية المنطق.
على الرغم من أن فهم القواميس يمكن أن يكون مفيدًا جدًا في كتابة كود سهل القراءة وجميل، إلا أنه ليس دائمًا الخيار الصحيح.
استخدمهم كالتالي:
في بعض الأحيان يمكن أن يجعل الكود يعمل ببطء ويأخذ مساحة أكبر من الذاكرة.
هذا سيزيد من قابلية القراءة للكود.
لا يمكننا أن نحاول فقط جعل الكود في سطر واحد بإضافة لغة معقدة أو كميات كبيرة من فهم القواميس. في هذه الحالات، من الأفضل اختيار طرق بديلة، مثل الدورات.