Kodax

القواميس Dictionaries — أساسيات Python

القواميس (Dictionaries)

القائمة تصل لعناصرها بالفهرس (0، 1، 2...). لكن كثيراً ما نريد الوصول بالاسم: هاتف "أحمد"، سعر "قهوة"، عاصمة "العراق". القاموس يخزن أزواجاً من مفتاح: قيمة.

student = {"name": "منى", "age": 21, "city": "البصرة"}
print(student["name"])   # منى

الخصائص

- المفاتيح فريدة: إسناد مفتاح موجود يستبدل قيمته.

- المفاتيح عادة نصوص أو أرقام (يجب أن تكون قيماً غير قابلة للتعديل).

- القيم يمكن أن تكون أي شيء، حتى قوائم أو قواميس أخرى.

- منذ Python 3.7 يحافظ القاموس على ترتيب إضافة العناصر.

- البحث بالمفتاح سريع جداً مهما كبر القاموس.

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

student["phone"]              # KeyError: المفتاح غير موجود
student.get("phone")          # None بدون خطأ
student.get("phone", "—")     # قيمة بديلة

الإضافة والتعديل والحذف

student["phone"] = "0770..."   # إضافة
student["age"] = 22            # تعديل
del student["city"]            # حذف
age = student.pop("age")       # حذف وإرجاع القيمة

المرور على القاموس

for key, value in student.items():
    print(key, "=", value)

keys() للمفاتيح، values() للقيم، items() للأزواج.

نمط العدّ (مهم جداً)

counts = {}
for word in ["قط", "كلب", "قط"]:
    counts[word] = counts.get(word, 0) + 1
print(counts)   # {'قط': 2, 'كلب': 1}

قائمة من القواميس

أسلوب شائع لتمثيل بيانات مثل جدول:

students = [
    {"name": "أحمد", "score": 88},
    {"name": "منى", "score": 95},
]
for s in students:
    print(s["name"], s["score"])

تمرين

أنشئ قاموس أسعار لثلاثة منتجات، واطلب من المستخدم اسم منتج واطبع سعره، أو "غير موجود" إن لم يكن في القاموس.

person = {"name": "أحمد", "age": 25, "city": "بغداد", "skills": ["Python", "SQL"]}

# الوصول
print(person["name"])                  # أحمد
print(person.get("job"))               # None
print(person.get("job", "غير محدد"))   # غير محدد

# إضافة وتعديل وحذف
person["job"] = "مبرمج"
person["age"] = 26
del person["city"]
skills = person.pop("skills")
print(person, skills)

# التحقق والمرور
if "name" in person:
    print("الاسم موجود")
for key, value in person.items():
    print(f"{key} = {value}")

# نمط العدّ باستخدام get
counter = {}
for char in "hello":
    counter[char] = counter.get(char, 0) + 1
print(counter)   # {'h': 1, 'e': 1, 'l': 2, 'o': 1}

# قاموس متداخل
users = {
    "u1": {"name": "أحمد", "age": 25},
    "u2": {"name": "منى", "age": 30},
}
print(users["u2"]["name"])   # منى

# دمج قاموسين
defaults = {"theme": "dark", "lang": "ar"}
settings = {"lang": "en"}
merged = {**defaults, **settings}
print(merged)    # {'theme': 'dark', 'lang': 'en'}
اختبر فهمك