• 0

كيف أرشح قاموس بالاعتماد على شروط معينة في بايثون؟

أملك القاموس التالي الذي يحتوي على إحداثيات نقاط مختلفة:

>>> points={'a':(3,4), 'b':(1,2), 'c':(5,5), 'd':(3,3)}

أريد إنشاء قاموس جديد يحتوي فقط على النقاط التي تملك قيم x و y أصغر من 5 (النقاط a وb وd)، جربت فعل ذلك عبر الشيفرة التالية لكن هل هنالك طريقة أفضل لفعل ذلك؟

>>> for item in [i for i in points.items() if i[1][0]<5 and i[1][1]<5]:
...     points_small[item[0]]=item[1]
...
>>> points_small
{'a': (3, 4), 'b': (1, 2), 'd': (3, 3)}

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

نعم، يوجد العديد من الطرق لفعل ذلك إذ يمكنك مثلا استخدام دالة .iteritems() بدلا من .items() إذا كنت تستخدم الإصدار الثاني من بايثون وكان متغير points يمتلك الكثير من المدخلات، وإلى جانبها ستحتاج إلى دوال dict وall بالإضافة إلى حلقة التكرار for للدوران حول القاموس وجملة شرطية if لوضع الشرط، كما في المثال التالي:

dict((k, v) for k, v in points.items() if all(x < 5 for x in v))

كما يمكنك الاستغناء عن دوال dict وall إذا كنت تستخدم الإصدار 2.7 من بايثون لتصبح الشيفرة البرمجية كهذه:

{k: v for k, v in points.iteritems() if v[0] < 5 and v[1] < 5}

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن