القواميس والمجموعات في Python
استكشف إنشاء dict وset واختبار العضوية والأنماط الشائعة مثل عدّ التكرارات باستخدام collections.Counter
القواميس والمجموعات في Python درس مجاني في DSA Interview Prep على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في DSA Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة DSA Interview Prep 4 دروس في المجموع.
قواميس Python: مخازن المفتاح والقيمة
يربط dict في Python المفاتيح بالقيم، ويوفّر في المتوسط عمليات بحث وإدراج وحذف بتعقيد O(1). وهو الأساس وراء مسألة two-sum، والتحقق من anagram، وعدّ التكرارات. يوضّح الكود ذلك.
d = {'apple': 3, 'banana': 5}
print(d['apple']) # 3
d['cherry'] = 7
print(len(d)) # 3
print('banana' in d) # True
del d['apple']
print(d) # {'banana': 5, 'cherry': 7}بحث آمن باستخدام .get()
تؤدي قراءة مفتاح مفقود باستخدام d[key] إلى تعطل البرنامج مع KeyError. استخدموا d.get(key, default) لإرجاع قيمة بديلة بدلًا من ذلك؛ فهي عادة آمنة تتجنب أخطاء وقت التشغيل المفاجئة.
freq = {}
words = ['the', 'cat', 'sat', 'on', 'the', 'mat']
for w in words:
freq[w] = freq.get(w, 0) + 1
print(freq)
# {'the': 2, 'cat': 1, 'sat': 1, 'on': 1, 'mat': 1}
print(freq.get('dog', 0)) # 0 (no KeyError)defaultdict لتجميع أوضح
ينشئ defaultdict(list) تلقائيًا قائمة فارغة لأي مفتاح جديد، فتختفي الشيفرة التمهيدية المتكررة من مسائل التجميع. ويبدأ defaultdict(int) كل مفتاح بالقيمة 0، ما يسهّل العد.
from collections import defaultdict
groups = defaultdict(list)
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
for w in words:
key = ''.join(sorted(w)) # canonical anagram key
groups[key].append(w)
print(list(groups.values()))
# [['eat','tea','ate'], ['tan','nat'], ['bat']]Counter: خرائط تكرار سريعة
إنّ Counter هو dict مخصص للعد: مرّروا إليه أي iterable لتحصلوا فورًا على خريطة للتكرارات. تُرجع most_common(k) أعلى k عناصر. يوضّح الكود فحص anagram.
from collections import Counter
c = Counter('abracadabra')
print(c) # Counter({'a':5,'b':2,'r':2,'c':1,'d':1})
print(c.most_common(2)) # [('a', 5), ('b', 2)]
# Valid anagram check
def is_anagram(s, t):
return Counter(s) == Counter(t)
print(is_anagram('anagram', 'nagaram')) # Trueمجموعات Python: مجموعات فريدة غير مرتبة
تحتفظ set بعناصر فريدة، وتوفّر اختبارات عضوية بتعقيد O(1). استخدموا {1, 2, 3} أو set(iterable)، لكن {} ينشئ dict، لذا استخدموا set() لإنشاء مجموعة فارغة. وهي مفيدة جدًا لاكتشاف التكرارات.
seen = set()
nums = [1, 2, 3, 2, 1, 4]
duplicates = []
for n in nums:
if n in seen: # O(1) check
duplicates.append(n)
seen.add(n)
print(duplicates) # [2, 1]
print(len(seen)) # 4 (unique values)عمليات المجموعات للمقابلات
تجري المجموعات عمليات رياضية: | للاتحاد، و& للتقاطع، و- للفرق، و^ للفرق المتماثل. تحل هذه العمليات أسئلة من نوع «العناصر المشتركة» في سطر واحد.
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # {1, 2, 3, 4, 5, 6} union
print(a & b) # {3, 4} intersection
print(a - b) # {1, 2} difference
print(a ^ b) # {1, 2, 5, 6} symmetric diffاختبار العضوية: List أم Set
يؤثر هيكل البيانات الذي تختارونه في السرعة. يستغرق التحقق باستخدام in في list تعقيد O(n)، بينما يستغرق O(1) في set. ويُعد تحويل القائمة إلى set قبل عمليات البحث المتكررة طريقة شائعة لتسريع التنفيذ.
word_list = ['apple', 'banana', 'cherry', 'date']
word_set = set(word_list)
# O(n) per check
print('banana' in word_list) # True
# O(1) per check
print('banana' in word_set) # True
# Practical example: find common elements
a = [1, 2, 3, 4, 5]
b = [3, 4, 5, 6, 7]
common = [x for x in a if x in set(b)]
print(common) # [3, 4, 5]التكرار على Dicts: المفاتيح والقيم والعناصر
مرّروا على dict باستخدام .keys() أو .values() أو .items(). لا تحذفوا المفاتيح أبدًا أثناء الحلقة؛ اجمعوها أولًا في قائمة، ثم احذفوها بعد ذلك. راجعوا الكود.
scores = {'Alice': 90, 'Bob': 75, 'Carol': 88}
for name, score in scores.items():
print(f'{name}: {score}')
# Find key with max value
best = max(scores, key=scores.get)
print(best) # Alice
# Safe deletion
to_del = [k for k, v in scores.items() if v < 80]
for k in to_del:
del scores[k]
print(scores) # {'Alice': 90, 'Carol': 88}Frozenset: مجموعات قابلة للتجزئة
إنّ frozenset مجموعة غير قابلة للتغيير، لذا يمكن استخدامها مفتاحًا في dict أو وضعها داخل set أخرى. وهي مفيدة لتجميع anagrams وفق مجموعة حروفها عندما لا يهم الترتيب.
from collections import defaultdict
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
groups = defaultdict(list)
for w in words:
key = frozenset(w) # hashable; 'eat','tea','ate' all share same key
groups[key].append(w)
print([sorted(g) for g in groups.values()])
# [['ate','eat','tea'], ['nat','tan'], ['bat']]استيعاب القواميس للتحويلات
ينشئ استيعاب القواميس mapping في سطر واحد: {k: v for ...}. وهو مفيد جدًا لعكس dict أو تصفية الأزواج. ملاحظة: يفترض العكس أن القيم فريدة. راجعوا الكود.
# Invert a dict
original = {'a': 1, 'b': 2, 'c': 3}
inverted = {v: k for k, v in original.items()}
print(inverted) # {1:'a', 2:'b', 3:'c'}
# Filter by value
scores = {'Alice': 90, 'Bob': 55, 'Carol': 78}
passing = {k: v for k, v in scores.items() if v >= 60}
print(passing) # {'Alice': 90, 'Carol': 78}أطول تسلسل متتالٍ
تحل المجموعات مسألة أطول تسلسل متتالٍ بتعقيد O(n): ضعوا جميع الأعداد في set، ثم ابدأوا العد فقط من كل عدد لا يوجد سابقه. لا حاجة إلى الفرز.
def longest_consecutive(nums):
num_set = set(nums)
best = 0
for n in num_set:
if n - 1 not in num_set: # start of sequence
cur = n
streak = 1
while cur + 1 in num_set:
cur += 1
streak += 1
best = max(best, streak)
return best
print(longest_consecutive([100,4,200,1,3,2])) # 4 (1,2,3,4)تحقق سريع
تحقق سريع — لنرَ مدى ترسّخ أفكار dict وset من هذا الدرس. ثقوا بحدسكم هنا. 🎯
مراجعة الدرس
مراجعة: توفّر dicts عمليات بحث بتعقيد O(1) للعد والتجميع، وتقلل Counter وdefaultdict من الشيفرة التمهيدية، بينما تحوّل sets عمليات الفحص بتعقيد O(n) إلى فحوص بتعقيد O(1).
الأسئلة الشائعة
هل درس «القواميس والمجموعات في Python» مجاني؟
نعم — نص درس «القواميس والمجموعات في Python» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة DSA Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة DSA Interview Prep 4 دروس في المجموع.
ماذا ستتعلم في «القواميس والمجموعات في Python»؟
استكشف إنشاء dict وset واختبار العضوية والأنماط الشائعة مثل عدّ التكرارات باستخدام collections.Counter تتمرن على DSA Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ DSA Interview Prep؟
لا تُشترط خبرة سابقة. DSA Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «القواميس والمجموعات في Python»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس DSA Interview Prep هذا؟
نعم. كل درس في DSA Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- القوائم والصفوف والتقطيع
- القواميس والمجموعات في Python
- الاختصارات والدوال المضمّنة
- الدوال والإغلاقات وLambda