اذهب إلى المحتوى

السؤال

نشر

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

>>> 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)}

Recommended Posts

  • 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}

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...