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