الدرس 3 من 10
الترتيب بمفتاح
- 13 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
المُعامِل key يحدّد أساس المقارنة
الشرح
الدالة sorted() تُرجع قائمة جديدة مرتّبة وتترك القائمة الأصلية كما هي، أما .sort() فترتّب القائمة نفسها وتُرجع None، ومن هنا يأتي الخطأ الشائع items = items.sort().
وkey= تأخذ دالة تُستدعى على كل عنصر، وتقارن Python بين العناصر بما تُرجعه هذه الدالة. وأقصر طريقة لكتابتها lambda، وهي دالة بلا اسم تُكتب في سطر واحد مثل key=lambda s: s["score"]، أما reverse=True فتعكس اتجاه الترتيب.
وإذا أردت الترتيب بأكثر من معيار فأرجِع صفًّا (tuple)، فتقارن Python أول عنصر فيه، فإن تساوى انتقلت إلى الذي يليه. فمثلًا key=lambda s: (s["city"], -s["score"]) ترتّب بالمدينة، ثم بالدرجة تنازليًّا داخل كل مدينة، لأن إشارة السالب تعكس ترتيب الرقم وحده.
والترتيب في Python مستقرّ، أي أن العنصرين المتساويين في المفتاح يبقيان بترتيبهما الأصلي حتى مع reverse=True، أما إذا قلبت النتيجة بـ [::-1] فسينقلب ترتيبهما معها ويضيع هذا الضمان.
المطلوب
اصنع by_score وفيها الطلاب من الأعلى درجة إلى الأدنى، مع بقاء المتساويين بترتيبهما الأصلي، ثم اصنع ranked مرتّبة بالدرجة تنازليًّا، وعند التساوي بالاسم أبجديًّا. استعمل في الاثنتين sorted وkey=، ولا تغيّر students.
الفحوص
5 فحوص- القائمة by_score مرتّبة من الأعلى درجة إلى الأدنى
- المتساويان في by_score بترتيبهما الأصلي
- القائمة ranked مرتّبة بالدرجة تنازليًّا ثم بالاسم أبجديًّا
- القائمة students بقيت بترتيبها الأصلي
- الترتيب بـ key= وليس بمقارنة يدوية