"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حذف العناصر بأمان من القاموس أثناء التكرار في بايثون؟

كيفية حذف العناصر بأمان من القاموس أثناء التكرار في بايثون؟

تم النشر بتاريخ 2024-11-12
تصفح:290

How to Safely Delete Items from a Dictionary While Iterating in Python?

تعديل القاموس التكراري

من الشائع الحاجة إلى حذف عناصر من القاموس أثناء التكرار عليها في نفس الوقت. ومع ذلك، هذه العملية غير مدعومة أصلاً في بايثون.

قد يؤدي تعديل القاموس أثناء التكرار عليه إلى حدوث أخطاء. على سبيل المثال، قد يفشل مقتطف التعليمات البرمجية الذي قدمته في Python 3 مع ظهور الخطأ:

خطأ وقت التشغيل: تم تغيير حجم القاموس أثناء التكرار.
RuntimeError: dictionary changed size during iteration.

حل بايثون 3 ] &&&]في Python 3، الحل هو إنشاء قائمة مفاتيح من القاموس والتكرار فوق تلك القائمة بدلاً من ذلك. إليك مثال:

# Python 3 أو أعلى لـ k في القائمة (mydict.keys()): إذا كان mydict[ك] == 3: del mydict[k]
# Python 3 or higher

for k in list(mydict.keys()):
    if mydict[k] == 3:
        del mydict[k]

Python 2 Solution

في Python 2، تقوم طريقة المفاتيح () بإرجاع مكرر، والذي لا يمكن تعديله أثناء التكرار. لتعديل القاموس يمكنك استخدام الطريقة التالية:

# Python 2 لـ k، v في mydict.items(): إذا كان الخامس == 3: del mydict[k]
# Python 2

for k, v in mydict.items():
    if v == 3:
        del mydict[k]

for k في mydict.keys(): إذا كان mydict[ك] == 3: del mydict[k]
for k in mydict.keys():
    if mydict[k] == 3:
        del mydict[k]
المنهج البديل

بدلاً من ذلك، يمكنك استخدام طريقة pop() لحذف العناصر من القاموس أثناء التكرار:

لـ k في القائمة (mydict.keys ()): إذا ك == 3: mydict.pop(k)

لاحظ أن هذا الأسلوب أكثر كفاءة لأنه لا يقوم بإنشاء قائمة إضافية.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3