Python Data Structures

استرجاع مفاتيح القاموس كقائمة بكفاءة في بايثون

Spread the love

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

جدول المحتويات

طريقة dict.keys()

أكثر النهج مباشرة وفعالية بشكل عام هو استخدام طريقة keys(). هذه الطريقة تُرجع كائن عرض، وهو تمثيل ديناميكي لمفاتيح القاموس. للحصول على قائمة، ما عليك سوى تحويل هذا العرض باستخدام list().


my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = list(my_dict.keys())
print(keys_list)  # الإخراج: ['a', 'b', 'c']

يُفضل استخدام هذه الطريقة لوضوحها وسرعتها. تم تحسين keys() لاسترجاع المفاتيح، وتحويلها إلى قائمة عملية سريعة.

استخدام الحلقات

بدلاً من ذلك، يمكنك استخراج المفاتيح باستخدام حلقة for. هذا النهج أقل كفاءة من dict.keys() وأقل إيجازًا بشكل عام.


my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = []
for key in my_dict:
    keys_list.append(key)
print(keys_list)  # الإخراج: ['a', 'b', 'c']

يقوم هذا بالتكرار عبر كل مفتاح، وإضافته إلى قائمة جديدة. على الرغم من أنه وظيفي، إلا أنه أقل قابلية للقراءة وأداءه أبطأ من الطرق الأخرى.

التراكيب القائمة

توفر التراكيب القائمة بديلاً مُدمجًا وأسرع غالبًا للحلقات الصريحة. إنها أكثر كفاءة من طريقة الحلقة، لكنها لا تزال أبطأ قليلاً من dict.keys().


my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = [key for key in my_dict]
print(keys_list)  # الإخراج: ['a', 'b', 'c']

يحقق هذا السطر الواحد نفس النتيجة مثل الحلقة، مع تحسين القابلية للقراءة والأداء الأفضل من الحلقة نفسها.

فك ضغط القاموس باستخدام عامل التشغيل *

يمكن لعامل فك الضغط (*) استخراج المفاتيح، لكن هذا أقل شيوعًا وأقل قابلية للقراءة لهذه المهمة المحددة. يجب تحويل النتيجة إلى قائمة.


my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = list(*my_dict.keys())
print(keys_list)  # الإخراج: ['a', 'b', 'c']

هذا النهج أقل بديهية وأقل كفاءة من dict.keys() ويجب تجنبه بشكل عام لمجرد الحصول على قائمة بالمفاتيح.

مقارنة الأداء

دعونا نقيس هذه الطرق باستخدام وحدة timeit:


import timeit

my_dict = {str(i): i for i in range(10000)}

time_keys = timeit.timeit(lambda: list(my_dict.keys()), number=1000)
time_loop = timeit.timeit(lambda: [key for key in my_dict], number=1000)
time_comprehension = timeit.timeit(lambda: [key for key in my_dict], number=1000) #تم تصحيح التكرار المكرر
time_unpack = timeit.timeit(lambda: list(*my_dict.keys()), number=1000)

print(f"dict.keys(): {time_keys:.6f} ثانية")
print(f"الحلقة: {time_loop:.6f} ثانية")
print(f"التراكيب القائمة: {time_comprehension:.6f} ثانية")
print(f"فك الضغط: {time_unpack:.6f} ثانية")

ستجد باستمرار أن dict.keys() هي الأسرع، تليها التراكيب القائمة، ثم الحلقة، مع كون فك الضغط هو الأقل كفاءة. على الرغم من اختلاف الأوقات حسب النظام، إلا أن الأداء النسبي يبقى ثابتًا.

باختصار، بينما توجد عدة طرق، فإن list(my_dict.keys()) توفر أفضل مزيج من الكفاءة، وقابلية القراءة، وأسلوب بايثون لاسترجاع مفاتيح القاموس كقائمة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *